零基础C语言:第五讲(数组与二维数组)

262 阅读3分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战

数组

  • 概念:存储相同类型的数据

  • 定义:类型 数组名[元素个数]

    • 举例:int a[4];char b[24];double c[3];
  • 数组不能被动态定义

  • 访问数组中的元素:数组名[下标]

  • 循环和数组的关系(循环计数器通常从0开始)

    • 举例(存放10个成绩,并求出平均成绩)
    • 结果
  • 数组的初始化

    • 将数组中所有元素初始化为0,可以这么写:int a[10]={0};//事实上是将数组元素的第一个元素赋值为0
    • 如果赋予不同的值,那么需要用逗号分隔开:int a[10]={1,2,3,4,5,6,7,8,9,0};
    • 还可以只给一部分元素赋值,未被复制的元素自动初始化为0:int a[10]={1,2,3,4,5,6};//表示前六个元素赋值,后边4个元素系统自动初始化为0.

      • 举例
      • 结果
    • C99增加了一种新特性:指定初始化元素。这样就可以只对数组中的某些指定的元素进行初始化赋值,而未被复制的元素自动化初始化为0:int a[10]={[3]=3,[5]=5,[8]=8}

      • 举例
      • 结果
  • 注:原则上是不能使用动态定义数组大小,但最新C99支持可变数组而gcc编译时遵从c99(可变长度是指程序在运行时才决定长度)

    • 举例 因为前面输入个数时按了回车,所以要先使用getchar清空缓冲区。
    • 结果

二维数组

  • 定义:类型 数组名[常量表达式][常量表达式]

  • 访问:数组名[下标][下标]

  • 初始化

    • 由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内。int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

      • 实例
      • 结果
    • 为了更直观地表示元素的分布,可以用大括号将每一行的元素括起来。int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

      • 举例
    • 二维数组也可以仅对部分元素赋初值。int a[3][4]={{1},{5},{9}};

      • 举例
      • 结果
    • 如果希望整个二维数组初始化为0,直接在大括号内写一个0即可(如果只定义没有初始化则会出现随机值)。int a[3][4]={0};
    • C99增加了一种特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为0。int a[3][4]={[0][0]=1,[1][1]=2,[2][2]=3};

      • 举例
      • 结果
    • 二维数组的初始化可以让编译器根据元素的数量计算数组的长度。但只有第一维的元素个数可以不写,其他维度必须写上。int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

      • 举例
      • 结果
    • 矩阵的转秩

      • 举例(转秩前)
      • 结果1
      • 举例(转秩后)
      • 结果2
  • 注意

    • 注意下标的取值范围,防止数组的越界访问
    • 二维数组在内存中仍然是线性存储

      • 举例