跳转至

数组

一维数组

定义

存储类型 数据类型 数组名[整型常量或整型常量表达式]
  • 数组为构造类型,连续存放。

  • 数组变长在新标准中有定义,但也要看编译器是否支持。

初始化

  • 不初始化

  • 部分元素初始化

  • 全部初始化

数组名

  • 数组名是当前数组的起始位置,为地址常量。在 printf 中使用 %p 输出地址值。

二维数组

定义

存储类型 数据类型 数组名[行下标][列下标]

初始化

  • 不初始化

  • 部分元素初始化

    int arr[2][2] = { 0 };
    
    // 在进行初始化的情况下可省略行号
    int arr[][2] = { 1, 2, 3 };
    

  • 全部初始化

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

数组名

  • 二维数组的数组名是当前数组的起始位置,为地址常量。

二维数组存储结构

二维数组存储结构

  • 二维数组的数组名地址偏移是一整行。二维数组的元素也是连续的,从存储上说没有行列之分,参考上图。
    参考上图:
    
    int arr[2][3];      // 二维数组
    arr + 0 -> arr[0]   // 第0行元素
    arr + 1 -> arr[1]   // 第1行元素
    

字符数组

定义

存储类型 数据类型 数组名[下标]

初始化

  • 单个字符初始化

    #define N 3
    char str[N] = { 'a', 'b', 'c' };
    
    // 空间验证
    char str[] = { 'a', 'b', 'c' };
    printf("%lld\n", sizeof(str));  // 输出值为3
    

  • 字符串初始化

    #define N 4
    
    /*
      向字符数组输入字符串时,计算机先将输入内容写入缓冲区,
      当回车后结束输入并将缓冲区内容写入数组并附加'\0'。
      所以以字符串形式初始化时要预留空间。
    */
    char str[N] = "abc";
    
    // 空间验证
    char str[] = "abc";
    printf("%lld\n", sizeof(str));  // 输出值为4
    

常用函数

  • strlen & sizeof
  • strcpy & strncpy
  • strcat & strncat
  • strcmp & strncmp

多维数组

  • 参考二维数组进行拓展