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

#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
  1. 看看 二维数组 a, 各个 sizeof 的值

    • sizeof(a) = 2*3*sizeof(int) = 24
    • sizeof(a[0]) = 3*sizeof(int) = 12
    • sizeof(a[0][0]) = sizeof(int) = 4
  2. 二维数组的 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

猜你喜欢

转载自blog.csdn.net/z21109/article/details/53436551
今日推荐