int main()
{
int matrix[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
printf("%p",matrix);
printf("%p",*matrix);
printf("%d",**matrix);
return 0;
}
二维数组名 matrix和 *matrix的输出结果是相同的,而**matrix指向的是matrix地址处存放的值 1.
所以 matrix+ 2表示的是指向第一行的指针指向了下2行;
而 (*matrix + 2)表示的是*matrix处的列指针向右移动了2位
所以,如上 *(*matrix + 2)输出的值应该是 3,第一行的列指针向右移动了3位。
以此类推,三维数组:
int matrix[3][5][6] = {0};
printf("%p\n",matrix);
printf("%p\n",*matrix);
printf("%p\n",**matrix);
数组名表示的是第一维层地址,*数组名表示的是第二维行地址,**数组名表示的是第三维列地址。
公式 简化指针运算
*(*(a+1) + 2) == *(a+1)[2] == a[1][2];