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 バイトです。したがって、2 つのポインターの配列のサイズは通常 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 に答える