我编写了以下代码,目的只是为了验证我用来学习c的其中一本书中写的内容。分配给第一个变量(即字符变量)的内存没有意义。分配的内存是4字节而不是1.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
答案 0 :(得分:0)
似乎您在混淆地址和大小。 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个字节的数据,这与结构体对齐有关。