我的结构数组的大小不同......为什么?

Sha*_*ars 0 c struct sizeof

#include <stdio.h>

#define SIZE 10

typedef struct dynArrStruct
{
    double value1;
    int value2;
    int value3;
}dynArr;

int main(int argc, char** argv)
{
    dynArr a1[SIZE];
    dynArr* a2[SIZE];
    printf("Size of a1 array: %d\n", sizeof(a1));
    printf("Size of a2 array: %d\n", sizeof(a2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第一个打印出160.

第二个打印出40.

我计算每个元素4个字节,第二个元素有10个元素.但我无法弄清楚为什么第一个有160.

谢谢.

use*_*016 14

a1是一个结构数组,a2是一个结构指针数组.


a1SIZE(10)个结构组成,在记忆中连续排列.

----------- ----------- ------- ----------- -----------
| struct0 | | struct1 | | ... | | struct8 | | struct9 |
----------- ----------- ------- ----------- -----------
Run Code Online (Sandbox Code Playgroud)

它的大小SIZE * sizeof(dynArr)= 10*16 = 160

为什么每个结构16个字节?

typedef struct dynArrStruct
{
    double value1; // sizeof(double) = 8
    int value2;    // sizeof(int)    = 4
    int value3;    // sizeof(int)    = 4
} dynArr;
Run Code Online (Sandbox Code Playgroud)

取这些的总和,你有16个字节.(甚至可能超过个别大小的总和,具体取决于填充)


a2SIZE(10)指向结构的指针组成,在内存中连续排列.它的大小SIZE * sizeof(dynArr*)= 10*4 = 40

为什么每个指针4个字节?

这是大多数32位系统上指针的大小.