(1) 测试代码 :
#include<stdio.h> int main() { int i, j; int a[5][5] = {{0,1,2,3,4},{5,6,7,8,9},{10,11,12,13,14},{15,16,17,18,19},{20,21,22,23,24}}; for(i=0;i<5;i++) { for(j=0;j<5;j++) { printf("%-3d ",a[i][j]); } printf("\n"); } printf("\n\n");
printf("a = %p\n",a); // 000000000064FDE0 printf("&a = %p\n",&a); // 000000000064FDE0 printf("a+1 = %p\n",a+1); // 000000000064FDF4 printf("&a+1 = %p\n",&a+1); // 000000000064FE44
return 0; } |
运行结果 :
分析 :
* "000000000064FDF4" - "000000000064FDE0" = 0x16(十六进制)
(16转换为10进制即为20, 即五个整数的长度)
即说明了二维数组数组名加一相当于地址加上一行数组的长度 .
* "000000000064FDE0" - "000000000064FE44" = 0x64(十六进制)
(16进制转换为十进制即为100, 即整个数组的长度)
即说明和一维数组相同”&数组名 + 1”都是指向整个数组的地址的下一块区域 .