在C语言中,数组是一种用于存储多个相同类型数据的数据结构。
一、数组的声明
1.一维数组
1.格式:type array_name[size];,其中type是数组元素的类型,例如int、char等;array_name是数组的名称;size是数组中元素的个数,这个大小必须是一个常量表达式。
2.例如:int numbers[5];声明了一个名为numbers的整数数组,它可以存储5个整数元素。
2.二维数组
1.格式:type array_name[rows][columns];。
2.例如:int matrix[3][4];声明了一个二维数组matrix,它有3行4列,可以用来表示一个3×4的矩阵,元素类型为int。
二、数组的初始化
1.一维数组初始化
1.可以在声明数组时进行初始化。例如:int numbers[5] = {1, 2, 3, 4, 5};,将数组numbers的元素分别初始化为1、2、3、4、5。
2.如果初始化的值少于数组的大小,剩余的元素会被初始化为0(对于数值类型)或者空字符(对于字符数组)。例如:int nums[5]= {1, 2};,那么nums[2]、nums[3]和nums[4]都将被初始化为0。
2.二维数组初始化
1.对于二维数组,可以按行进行初始化。例如:int matrix[3][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};。
2.也可以只给出部分初始值,未初始化的元素会被初始化为0。
三、数组元素的访问
1.一维数组
1.通过索引(下标)来访问数组元素,索引从0开始。例如,要访问numbers数组中的第3个元素(即索引为2的元素),可以使用numbers[2]。
2.二维数组
1.使用两个索引,第一个表示行,第二个表示列。例如,要访问matrix数组中第2行第3列的元素(索引从0开始),可以使用matrix[1][2]。
四、数组在内存中的存储
1.一维数组
1.一维数组的元素在内存中是连续存储的。例如,对于int numbers[5];,numbers[0]、numbers[1]、numbers[2]、numbers[3]和numbers[4]在内存中依次排列。
2.二维数组
1.二维数组在内存中也是按行顺序连续存储的。例如,对于int matrix[3][4];,先存储第一行的4个元素,再存储第二行的元素,以此类推。
五、数组作为函数参数
1.一维数组
1.当数组作为函数参数时,实际上传递的是数组的首地址(指针)。例如:
2.void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
printArray(numbers, 5);
return 0;
}
3.在函数printArray中,arr实际上是一个指针,指向传递进来的数组的首地址。
2.二维数组
1.当二维数组作为函数参数时,需要指定第二维的大小。例如:
2.void printMatrix(int mat[][4], int rows) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
}
int main() {
int matrix[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
printMatrix(matrix, 3);
return 0;
}
3.这里的mat是一个指向包含4个int元素的数组的指针。