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

标签 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 上测试。

最佳答案

您可能正在 64 位机器上编译,其中指针为 8 个字节。

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


如果您针对 32 位编译它,您将主要得到 sizeof(a) == 8

关于c - 为什么 sizeof(a) 是 16? (sizeof int 是 4 ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429463/

相关文章:

c - Linux 内核 : how to traverse physical pages in mem_map from user space using/dev/mem?

c - 警告 : format ‘%d’ expects a matching ‘int’ argument [-Wformat=]

c - GNU LD 填充空链接器部分

c - TTF_OpenFont 第 N 次尝试失败

c - 凯卡克 SHA-3-512 : Missed a detail

c++ - 如何在 GCC 中链接 libc 和 libstdc++ 的调试版本?

c - 为什么我可以在 gcc 上声明一个具有预定大小的数组而不是在 visual studio c++ 上?

c - 输入指针指向的函数

c - sizeof(struct) 不遵循填充

c - C 中的运算符 sizeof()