二维数组名称的含义
除了两种特殊情况,二维数组名都是指向二维数组中的第一个一维数组的数组指针。
- 特殊情况一:sizeof(数组名) [统计数组长度]
- 特殊情况二:&数组名 [对数组名取地址,得到的是二维的数组指针,数组指针的步长为整个二维数组的长度]
#include <stdio.h>
// 二维数组作为参数传递
//void printArr(int arr[3][3], int row, int col) // int arr[3][3] 等价于 int (*arr)[3] arr为指向二维数组中的第一个一维数组的数组指针
//void printArr(int (*arr)[3], int row, int col)
void printArr(int arr[][3], int row, int col)
{
for (int ii = 0; ii < row; ++ii)
{
for (int jj = 0; jj < col; ++jj)
{
//printf("%d ", arr[ii][jj]);
printf("%d ", *(*(arr+ii)+jj));
}
printf("\n");
}
}
int main()
{
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
/*
int arr[][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
*/
int (*p)[3] = arr; // 二维数组名代表指向二维数组中的第一个一维数组的数组指针
//打印出6
//printf("%d\n", arr[1][2]);
printf("%d\n", *(*(p+1)+2)); // p+1 跳到第二个一维数组,*(p+1)得到第二个一维数组第一个元素的地址,*(p+1)+2得到第二个一维数组第三个元素的地址,最后解引用的到6
printArr(arr, 3, 3);
return 0;
}
8852

被折叠的 条评论
为什么被折叠?



