「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」
数组
-
概念:存储相同类型的数据
-
定义:类型 数组名[元素个数]
- 举例:int a[4];char b[24];double c[3];
-
数组不能被动态定义
-
访问数组中的元素:数组名[下标]
-
循环和数组的关系(循环计数器通常从0开始)
- 举例(存放10个成绩,并求出平均成绩)
- 结果
- 举例(存放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
- 举例(转秩前)
-
-
注意
- 注意下标的取值范围,防止数组的越界访问
-
二维数组在内存中仍然是线性存储
- 举例
- 举例