#include "stdio.h"
int main()
{
int a[2][3]=
{
{1,2,3},
{4,5,6}
};
printf("sizeof(a) = %d\n", sizeof(a));
printf("sizeof(a[0]) = %d\n", sizeof(a[0]));
printf("sizeof(a[0][0]) = %d\n", sizeof(a[0][0]));
printf("&a = %x\n", &a);
printf("&a[0] = %x\n", &a[0]);
printf("&a[0][0] = %x\n", &a[0][0]);
return 0;
}
输出的值:
sizeof(a) = 24
sizeof(a[0]) = 12
sizeof(a[0][0]) = 4
&a = 22fe30
&a[0] = 22fe30
&a[0][0] = 22fe30
看看 二维数组 a, 各个 sizeof 的值
- sizeof(a) = 2*3*sizeof(int) = 24
- sizeof(a[0]) = 3*sizeof(int) = 12
- sizeof(a[0][0]) = sizeof(int) = 4
二维数组的 a, 各个地址和指针类型
- &a = 0x22fe30 = int (*)[2][3]
- &a[0] = 0x22fe30 = int (*)[3]
- &a[0][0] = 0x22fe30 = int *
他们的地址都是一样的,但是指针的类型和所代表的意义是不一样的。 - &a:表示该二维数组的指针,指针加一,表示地址移动整个二维数组的长度,即是: sizeof(a)=24 个字节。
- &a[0]:表示该二维数组第0行的指针, 指针加一,表示地址移动一行的长度,即是 sizeof(a[0])=12 个字节。
- &a[0][0]:表示该二维数组第0行第0列的指针, 指针加一,表示地址移动一个数组元素的长度,即是 sizeof(a[0][0]) = sizeof(int) = 4 个字节。
这里可以得出一个结论:
同一个地址,可以被不同类型的指针所指向,并且指向该地址的不同类型的指针所代表的意义也是不一样的。
Pillar Peng
2017.1.14 10:33