欢迎光临
我们一直在努力

C语言第4讲:数组

大家好,今天给大家整理了 C 语言数组从入门到实战的完整知识点,涵盖一维数组、二维数组、内存存储、变长数组、经典练习题,逻辑清晰、代码可直接运行,非常适合新手学习和复习。


📑 文章目录

  • 数组核心概念
  • 一维数组(基础核心)
  • 二维数组(进阶必备)
  • C99 变长数组(VLA)
  • 数组经典实战练习
  • 数组高频易错点总结
  • 结语

  • 🔎 一、数组核心概念

    数组是 C 语言中一组相同类型元素的有序集合,是编程最常用的数据结构之一。

    • 数组中元素类型必须完全相同
    • 元素个数不能为 0
    • 常见分类:一维数组、二维数组(最常用的多维数组)

    📌 二、一维数组(基础核心)

    1. 一维数组创建

    数据类型 数组名[常量值];

    示例:

    int math[20]; // 存储20个int类型成绩
    char ch[8]; // 存储8个char类型字符
    double score[10];// 存储10个double类型数据

    2. 一维数组初始化

    使用大括号 {} 赋值,分为两种方式:

    • 完全初始化:元素个数与数组大小一致

    int arr[5] = {1, 2, 3, 4, 5};

    • 不完全初始化:未赋值元素自动补 0

    int arr[6] = {1}; // 等价 {1,0,0,0,0,0}

    ❌ 错误写法:初始化项数超过数组

    int arr[3] = {1,2,3,4};

    3. 数组类型

    去掉数组名,剩余部分就是数组类型:

    • int arr[10] → 类型:int [10]
    • char ch[5] → 类型:char [5]

    4. 一维数组使用(下标访问)

    • 数组下标从 0 开始
    • 最后一个元素下标 = 元素个数 – 1
    • 访问格式:数组名[下标]

    #include <stdio.h>
    int main()
    {
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    printf("%d\\n", arr[3]); // 输出4
    printf("%d\\n", arr[7]); // 输出8
    return 0;
    }

    5. 一维数组遍历

    #include <stdio.h>
    int main()
    {
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int i = 0;
    for(i = 0; i < 10; i++)
    {
    printf("%d ", arr[i]);
    }
    return 0;
    }

    6. 一维数组内存存储

    • 一维数组在内存中连续存放
    • 相邻元素地址差 = 元素类型所占字节数(int 相差 4 字节)

    7. sizeof 计算数组元素个数(必背公式)

    int sz = sizeof(arr) / sizeof(arr[0]);

    • sizeof(arr):数组总字节数
    • sizeof(arr[0]):单个元素字节数
    • 结果:数组元素个数

    📊 三、二维数组(进阶必备)

    1. 二维数组本质

    以一维数组作为元素的数组,可以理解为 “表格”。

    2. 二维数组创建

    数据类型 数组名[行数][列数];

    示例:

    int arr[3][5]; // 3行5列的二维数组

    3. 二维数组初始化

    • 不完全初始化

    int arr[3][5] = {1, 2};

    • 完全初始化

    int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

    • 按行初始化(更清晰)

    int arr[3][5] = {{1,2},{3,4},{5,6}};

    • 省略行数(不能省略列数)

    4. 二维数组使用

    行、列下标均从 0 开始,访问格式:数组名[行][列]

    printf("%d", arr[2][4]); // 访问第3行第5列元素

    5. 二维数组遍历(双层循环)

    #include <stdio.h>
    int main()
    {
    int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
    int i, j;
    // 遍历输出
    for(i = 0; i < 3; i++)
    {
    for(j = 0; j < 5; j++)
    {
    printf("%d ", arr[i][j]);
    }
    printf("\\n");
    }
    return 0;
    }

    6. 二维数组内存存储

    • 二维数组在内存中也是连续存放
    • 行内连续、跨行也连续,整体是一段连续内存空间

    ⚙️ 四、C99 变长数组(VLA)

    1. 作用

    允许使用变量指定数组大小,运行时确定长度,更灵活。

    int n;
    scanf("%d", &n);
    int arr[n]; // 变长数组

    2. 重要特点

    • 数组大小运行时确定,不是 “可以变大”
    • 不能初始化
    • VS 不支持,GCC/Clang 支持

    🧪 五、数组经典实战练习(代码可直接运行)

    练习 1:字符从两端向中间汇聚

    #include <stdio.h>
    #include <windows.h>
    #include <string.h>

    int main()
    {
    char arr1[] = "welcome to bit…";
    char arr2[] = "#################";
    int left = 0;
    int right = strlen(arr1) – 1;

    while(left <= right)
    {
    Sleep(500);
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    left++;
    right–;
    printf("%s\\n", arr2);
    }
    return 0;
    }

    练习 2:二分查找(折半查找)

    #include <stdio.h>

    int main()
    {
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int left = 0;
    int right = sizeof(arr)/sizeof(arr[0]) – 1;
    int key = 7; // 要查找的数字
    int mid, find = 0;

    while(left <= right)
    {
    // 防止溢出写法
    mid = left + (right – left) / 2;
    if(arr[mid] > key)
    right = mid – 1;
    else if(arr[mid] < key)
    left = mid + 1;
    else
    {
    find = 1;
    break;
    }
    }
    if(find)
    printf("找到了,下标是:%d\\n", mid);
    else
    printf("找不到\\n");
    return 0;
    }


    ⚠️ 六、数组高频易错点总结

    • 数组下标从 0 开始,严禁越界访问
    • 初始化项数不能大于数组定义大小
    • 二维数组可省略行,不能省略列
    • 统一用 sizeof(arr)/sizeof(arr[0]) 计算元素个数
    • 二分查找必须是有序数组
    • 变长数组不能初始化,VS 环境不支持

    ✅ 结语

    数组是 C 语言的基础中的基础,掌握好数组的创建、访问、内存存储和常见用法,对后续学习指针、函数、数据结构都至关重要。

    如果这篇文章对你有帮助,欢迎点赞、收藏、关注,后续会持续更新 C 语言干货~

    赞(0)
    未经允许不得转载:171主机测评 » C语言第4讲:数组
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址