【C语言】[sizeof+指针]-int a[2][3],sizeof(a)与sizeof(a[0])

    xiaoxiao2021-12-14  20

    #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) = 24sizeof(a[0]) = 3*sizeof(int) = 12sizeof(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

    转载请注明原文地址: https://ju.6miu.com/read-965550.html

    最新回复(0)