#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上进行测试。
答案 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