gpt4 book ai didi

c - C中结构体的内存分配

转载 作者:行者123 更新时间:2023-11-30 16:18:31 25 4
gpt4 key购买 nike

我写了下面的代码只是为了验证我用来学习c的一本书中所写的内容。分配给第一个变量(即字符变量)的内存没有意义。分配的内存是 4 个字节而不是 1 个字节。有人可以帮助我哪里出了问题吗?

    struct book
{
char name;
int price;
int pages;
};
struct book b1={'a',23,45},b2={'d',56,34},b3={'e',38,79};
printf("%p\t %p\t %p\n",&b1,&b2,&b3);
printf("%p\t %p\t %p\n",&b1.name,&b1.price,&b1.pages);
0x7ffd4f9a0384     0x7ffd4f9a0390     0x7ffd4f9a039c
0x7ffd4f9a0384 0x7ffd4f9a0388 0x7ffd4f9a038c

最佳答案

您似乎将地址与大小混淆了。 printf 语句应该这样写:

printf("%zu\t %zu\t %zu\n", sizeof(b1), sizeof(b2), sizeof(b3));
printf("%zu\t %zu\t %zu\n", sizeof(b1.name), sizeof(b1.price), sizeof(b1.pages));

这将为您提供以下输出:

12       12      12
1 4 4

至于为什么结构体的大小是 12 字节,而只保存 9 字节的数据,这与结构体对齐有关。

关于c - C中结构体的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com