1
#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 上测试。

4

2 回答 2

10

您可能在指针为 8 个字节的 64 位机器上编译。

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


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

于 2012-07-11T09:23:56.687 回答
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
于 2012-07-11T09:23:48.280 回答