#include <stdio.h>
/* 验证过程
arr[0][0]=0x7fff560d8be0 arr[0][1]=0x7fff560d8be4 arr[0][2]=0x7fff560d8be8
arr[1][0]=0x7fff560d8bec arr[1][1]=0x7fff560d8bf0 arr[1][2]=0x7fff560d8bf4
arr = 0x7fff5ab9fbe0 --> arr是数组名 代表 数组第一个元素的地址
arr+1 = 0x7fff5ab9fbec --> 数组第一个元素(因为是一个二维数组,第一个元素的地址又是这个一维数组的)的地址 以第一个元素的长度+1
&arr[0][0] = 0x7fff5ab9fbe0 --> 第一个元素的地址
&arr[0][0]+1 = 0x7fff5ab9fbe4
arr[0] = 0x7fff5e393be0 --> 行地址 二维数组内第一个元素(这个元素是个一维数组)的地址 以第一行元素的长度+1
arr[1] = 0x7fff5e393bec --> 第二行地址
&arr = 0x7fff560d8e0 --> 二维数组的地址
&arr+1 = 0x7fff560d8e0 --> 越界了的地址
*/
int main(){
int arr[2][3] = {1,2,3,4,5,6};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("&arr[%d][%d]=%p ",i,j,&arr[i][j]);
}
printf("\n");
}
printf("\narr = %p\n",arr); // &arr[0][0]=0x7fff560d8be0
printf("\narr+1 = %p\n",arr+1); // &arr[1][0]=0x7fff560d8bec
printf("\narr[0] = %p\n",arr[0]);
printf("\narr[1] = %p\n",arr[1]);
return 0;
} |
|