(5)数组
1. 一维数组与二维数组的定义和初始化
一维数组
- 定义
一维数组用于存储一组相同类型的数据元素。其定义格式为:数据类型 数组名[数组大小];
。例如,定义一个包含 5 个整数的数组:int array[5];
。这里array
是数组名,int
是数组元素的数据类型,5
表示数组中元素的个数。 - 初始化
- 完全初始化:在定义数组时为所有元素赋初值。例如:
int array[5] = {1, 2, 3, 4, 5};
。 - 部分初始化:只给部分元素赋初值,未初始化的元素自动初始化为 0(对于数值类型)或
'\0'
(对于字符类型)。例如:int array[5] = {1, 2};
,此时array[2]
、array[3]
和array[4]
的值都为 0。 - 省略数组大小初始化:如果在初始化时给出了所有元素的值,可以省略数组大小。例如:
int array[] = {1, 2, 3};
,编译器会根据初始化元素的个数自动确定数组大小为 3。
- 完全初始化:在定义数组时为所有元素赋初值。例如:
二维数组
- 定义
二维数组可以看作是一个具有行和列的表格形式的数据结构,其定义格式为:数据类型 数组名[行数][列数];
。例如,定义一个 3 行 4 列的整型二维数组:int matrix[3][4];
。 - 初始化
- 按行初始化:把每行的元素用花括号括起来,依次列出。例如:
int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};
- **按顺序初始化**:也可以将所有元素按顺序写在一个花括号内,编译器会按照行优先的顺序为数组元素赋值。例如:`int matrix[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};`。
- **部分初始化**:和一维数组类似,可以只对部分元素初始化,未初始化的元素自动赋初值。例如:
int matrix[3][4] = {{1, 2},{3, 4}
};
此时,第一行的后两个元素和第二行的后两个元素以及第三行的所有元素都初始化为 0。
2. 数组做函数参数的程序设计
一维数组作为函数参数
- 当一维数组作为函数参数时,实际上传递的是数组的首地址。在函数中,可以通过这个首地址访问整个数组。例如,编写一个函数用于计算一维数组元素的和:
int sum_array(int array[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += array[i];}return sum;
}
在main
函数中调用:
int main() {int array[] = {1, 2, 3, 4, 5};int size = sizeof(array) / sizeof(array[0]);int result = sum_array(array, size);printf("数组元素的和为: %d\n", result);return 0;
}
这里int array[]
在函数参数中也可以写成int *array
,它们在这种情况下是等价的。
二维数组作为函数参数
- 对于二维数组作为函数参数,需要指定第二维的大小(列数),因为编译器需要根据这个信息来计算数组元素的地址。例如,编写一个函数用于打印二维数组的元素:
void print_matrix(int matrix[][4], int rows) {for (int i = 0; i < rows; i++) {for (int j