一、一维数组

1.1、数组声明

  1. int a[100];

1.2、声明同时赋值

  1. int a[5] = {22, 37, 3490, 18, 95};
  • 注意
    • 数组a声明之后再进行大括号赋值,导致报错。
      1. int a[5];
      2. a = {22, 37, 3490, 18, 95}; // 报错

1.3、指定位置赋值

  • 数组的2号、9号、14号位置被赋值,其他位置的值都自动设为0。
    1. int a[15] = {[2] = 29, [9] = 7, [14] = 48};

1.4、数组访问

  1. int a[] = {1,2,5,6};
  2. //数组的成员从0开始编号
  3. printf("%d",a[0])

1.5、更新数组中的值

  1. int a[] = {1,2,5,6};
  2. //数组的成员从0开始编号
  3. printf("%d",a[0])
  4. a[0] = 99;
  5. printf("%d",a[0])

1.6、获取数组的长度

  • sizeof 运算符会返回整个数组的字节长度

    1. int a[] = {22, 37, 3490};
    2. int arrLen = sizeof(a); // 12
  • 获取数组的成员数量

    1. // 由于数组成员都是同一个类型,每个成员的字节长度都是一样的
    2. //所以数组整体的字节长度除以某个数组成员的字节长度,就可以得到数组的成员数量。
    3. sizeof(a) / sizeof(a[0])

二、多维数组

2.1、声明

  • C 语言允许声明多个维度的数组,有多少个维度,就用多少个方括号,比如二维数组就使用两个方括号。

    1. int board[10][10];

    2.2、声明同时赋值

    1. int a[2][5] = {
    2. {0, 1, 2, 3, 4},
    3. {5, 6, 7, 8, 9}
    4. };

    2.3、初始化指定位置赋值

    1. int b[2][2] = {[0][0] = 1, [1][1] = 2};

    2.4、获取数组长度

    1. //获取整个数组的字节数
    2. printf("数组长度 %d\n",sizeof(b));
    3. //获取一维数组的元素个数
    4. printf("数组元素个数 %d\n",sizeof(b) / sizeof(b[0]));
    5. //获取二维数组的元素个数
    6. printf("数组元素个数 %d\n",sizeof(b[0]) / sizeof(b[0][0]));

    三、变长数组

    变长数组(variable-length array,简称 VLA)

  • 数组arr就是变长数组,因为它的长度取决于变量n的值,编译器没法事先确定,只有运行时才能知道n是多少。

    1. int n = x + y;
    2. int arr[n];

四、数组的地址

4.1、获取数组元素的地址

  • 由于数组的起始地址是常用操作,&array[0]的写法有点麻烦,
  • C 语言提供了便利写法,数组名等同于起始地址,也就是说,数组名就是指向第一个成员(array[0])的指针。 ```c int a[5] = {11, 22, 33, 44, 55}; int* p; //获取数组元素的地址 p = &a[0];

// 等同于 //int* p = a;

printf(“%d\n”, *p); // Prints “11”

  1. <a name="kRIgq"></a>
  2. #### 4.2、数组指针的加减法
  3. - 利用指针遍历数组
  4. - 如果指针变量p指向数组的一个成员,那么p++就相当于指向下一个成员
  5. ```c
  6. int a1[] = {11, 22, 33, 44, 55, 999};
  7. int* p1 = a1;
  8. while (*p1 != 0) {
  9. printf("%d\n", *p1);
  10. p1++;
  11. }

五、数组的复制

5.1、使用循环遍历复制

  1. for (i = 0; i < N; i++)
  2. a[i] = b[i];

5.2、使用 memcpy 复制

  1. memcpy(a, b, sizeof(b));

六、作为参数

6.1、声明参数数组

  1. int sum_array(int a[], int n) {
  2. // ...
  3. }
  4. int a[] = {3, 5, 7, 3};
  5. int sum = sum_array(a, 4);

6.2、变长数组作为参数

  1. int sum_array(int n, int a[n]) {
  2. // ...
  3. }
  4. int a[] = {3, 5, 7, 3};
  5. int sum = sum_array(4, a);

6.3、数组字面量作为参数

  1. // 数组变量作为参数
  2. int a[] = {2, 3, 4, 5};
  3. int sum = sum_array(a, 4);
  4. // 数组字面量作为参数
  5. int sum = sum_array((int []){2, 3, 4, 5}, 4);

参考