注册 登录
编程论坛 C语言论坛

结构体所占字节的问题

编程小猪 发布于 2023-02-24 16:26, 979 次点击
#include <stdio.h>

int main()
{
   struct cat
    {
        int a[10];
        char ch;
        float f;
        double *p;
    } cat1;
    printf("%d",sizeof(cat1));
   
   return 0;
}
为什么我算出来是33,编译器是56,答案确是27?为什么double *p会是占2个字节?请各位大佬不吝赐教!!
6 回复
#2
rjsp2023-02-24 16:54
int的长度是实现定义的,结构体的对齐排布也是实现定义的,所以不可能有什么标准答案

假如是 LLP64 数据模型(VC x64),那 10*4 + 4 + 4 + 8 = 56
假如是 ILP32 数据模型(VC x86),那 10*4 + 4 + 4 + 4 = 52

假如用的是古老16位计算机,且未作变量对齐,那有可能真的是 10*2 + 1 + 4 + 2 = 27
#3
renkejun19422023-02-24 18:39
结构的内存占用根据编译器不同而有所不同,这是没有标准答案的。
当然如果你的目的是考试的话,那就死记硬背答案吧。
#4
pvm20002023-02-25 00:25
sizeof最准确
#5
编程小猪2023-02-25 14:23
回复 2楼 rjsp
懂了,不纠结这个题目了,谢谢大佬
#6
编程小猪2023-02-25 14:24
回复 4楼 pvm2000
用了sizeof()的,int类型是4个字节
#7
编程小猪2023-02-25 14:24
回复 3楼 renkejun1942
哈哈哈,但愿4月份专升本不要出这种题目
1