为什么sizeof(a)16? (sizeof int是4)

时间:2012-07-11 09:22:09

标签: c gcc sizeof

#include <stdio.h>

int main() {
    int *a[2]; // an array of 2 int pointers
    int (*b)[2];
    // pointer to an array of 2 int (invalid until assigned) //
    int c[2] = {1, 2}; // like b, but statically allocated

    printf("size of int %ld\n", sizeof(int));
    printf("size of array of 2 (int *) a=%ld\n", sizeof(a));
    printf("size of ptr to an array of 2 (int) b=%ld\n", sizeof(b));
    printf("size of array of 2 (int) c=%ld\n", sizeof(c));
    return 0;
}

a是一个包含2个整数指针的数组,所以大小不应该是2 * 4 = 8吗?

在GCC上进行测试。

2 个答案:

答案 0 :(得分:10)

你可能在64位机器上编译指针是8个字节。

int *a[2]是一个包含2个指针的数组。因此sizeof(a)正在返回16.
(因此它与int的大小无关。)


如果您将其编译为32位,则大多数情况下会获得sizeof(a) == 8

答案 1 :(得分:5)

在64位计算机上,指针通常是8个字节。所以两个指针数组的大小通常是16个字节。

int *a[2];    // array of two pointers to int
int (*b)[2];  // pointer to an array of two int

sizeof a;     // is 2 * 8 bytes on most 64-bit machines
sizeof b;     // is 1 * 8 bytes on most 64-bit machines
相关问题