数组
数组语义
数组是一种容器(放东西的东西),特点是:
- 其中所有的元素具有相同的数据类型;
- 一旦创建,不能改变其大小
- 数组中的元素在内存中是连续依次排列的
定义数组
<类型> 变量名称[元素数量];
int grades[10];
double weight[20] = {1,2,3}; // 省略的数组内容将填充为0
- 类型表示数组中每个元素的类型
- 元素数量必须是整数
- C99之前,元素数量必须是编译时刻确定的字面量
数组初始化
int a1[] = {1,2,3,4,5,6,7}; // 编译器会计算数组的大小
int a2[4] = {2,3,}; // 编译器会将a[2]、a[3]默认设置为0
int a3[5] = {[1] = 3, [3] = 5, 6}; // C99标准才有的,最终结果为:a3={0, 3, 0, 5, 6};
数组的单元
- 数组的每个单元就是数组类型的一个变量。
- 使用数组时放在
[]
中的数字叫做下标或索引,下标从0开始计数。
有效的下标范围
- 编译器和运行环境都不会检查数组下标是否越界,无论对数组单元进行读或写。
- 一旦程序运行,越界的数组访问可能造成问题,导致程序奔溃。
segmentation fault
- 程序猿应该保证程序只是用有效的下标值:
[0, 数组的大小-1]
长度为0的数组
int a[0];
长度为零的数组可以存在,但是无用。
数组的使用:数组的定义->数组的初始化->使用数组->销毁数组
二维数组
二维数组即两个维度的数组,可以理解为数组里的元素为数组。
- 定义:
int array[3][5];
二维数组中每个元素的数据类型为int
。
- 遍历二维数组:
for ( i =0; i < 3; i++ ) { // i控制行
for ( j = 0; j < 5; j++ ) { // j控制列
a[i][j] = i*j;
}
}
a[i][j]
表示第i行第j列的单元。
- 二维数组的初始化
int [][5] = {
{0,1,2,3,4},
{2,3,4,5,6}
};
注意
- 列数必须给出,行数可以由编译器来确定。
- 每行一个
{}
,逗号进行分割。 - 最后一个数组的逗号可以省略。
- 初始化过程中,不足表示补0操作。
数组运算
- 数组的长度
sizeof
是一个运算符,计算整个数组占据的内容的大小,单位是字节。
数组的长度:sizeof(arr) / sizeof(arr[0])
#include <stdio.h>
int main(void) {
int arr[] = {1,2,4,6,73,2,4,6,7,9};
printf("数组的长度为:%d\n", sizeof(arr)/sizeof(arr[0]));
return 0;
}
数组作为函数参数时,往往必须再用另一个参数来传入数组的大小,这样做的理由有:
- 不能在[]中给出数组的大小
- 不能在利用
sizeof
来计算数组的元素个数
数组的赋值
数组变量本省不能被赋值;
要把一个数组的所有元素交给另外一个数组,必须采用遍历。
详情数组查看C语言中文网之数组