什么是二维数组
在c语言中,二维数组是由多个一维数组组成的,也就是说,二维数组包含了许多行和列。一维数组的下标是只有一个,而二维数组的下标有两个,第一个下标表示行数,第二个下标表示列数。二维数组的定义方式如下:
数据类型 数组名[行数][列数];
其中,数据类型是指这个数组中每个元素的数据类型,数组名是这个数组的名称,行数表示数组中一共有多少行,而列数表示数组中每行有多少个元素,注意行数和列数都必须是正整数。
二维数组的初始化
使用双重循环初始化
同一维度的数组初始化方法相同,二维数组可以使用嵌套的循环来进行初始化,如下:
int arr[3][4];
int i, j;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; ++j) {
arr[i][j] = i * 4 + j;
}
}
以上代码的意思是,定义了一个3行4列的int类型数组arr,然后利用嵌套的两个for循环,对数组的每一个元素进行了初始化。
数组元素初始化
如果只想对二维数组的某些元素进行初始化,可以使用类似一维数组的方式,如下:
int arr[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
以上代码的意思是,定义了一个3行4列的int类型数组arr,并且直接利用大括号对每个元素进行了初始化。
二维数组的使用
访问二维数组的元素的方式和一维数组一样,只需要用两个下标来表示行数和列数即可。
int arr[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
int num = arr[2][3]; // num的值为11
以上代码中,访问arr数组中第3行第4列的元素,即11。
二维数组作为参数传递
在c语言中,函数可以接收数组作为参数,二维数组也不例外。当我们将一个二维数组作为参数传递给函数时,可以用以下两种方式:
把整个数组作为参数传递
把数组的每一行作为参数传递
以下是二者的具体实现:
//以下代码是把整个数组作为参数传递
void printArray(int arr[][4], int rows) {
int i, j;
for (i = 0; i < rows; ++i) {
for (j = 0; j < 4; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int arr[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
printArray(arr, 3);
return 0;
}
以上代码中,printArray函数接收一个二维数组和行数作为参数,然后使用嵌套的for循环打印出数组中的每一个元素。
//以下代码是把数组的每一行作为参数传递
void printRow(int *row, int cols) {
int i;
for (i = 0; i < cols; ++i) {
printf("%d ", *(row + i));
}
printf("\n");
}
int main() {
int arr[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
int i;
for (i = 0; i < 3; ++i) {
printRow(arr[i], 4);
}
return 0;
}
以上代码中,printRow函数接收一个一维数组和列数作为参数,然后打印出该行的每一个元素。
总结
二维数组是c语言中非常重要的数据类型之一,它可以方便的处理多行和多列的数据。使用时需要注意二维数组的初始化和访问方法,以及如何将二维数组作为参数传递给函数。