#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是一个结构指针数组.
a1由SIZE(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个字节.(甚至可能超过个别大小的总和,具体取决于填充)
a2由SIZE(10)指向结构的指针组成,在内存中连续排列.它的大小SIZE * sizeof(dynArr*)= 10*4 = 40
为什么每个指针4个字节?
这是大多数32位系统上指针的大小.