c中结构的内存分配

时间:2019-04-27 19:00:50

标签: c pointers

我编写了以下代码,目的只是为了验证我用来学习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

1 个答案:

答案 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个字节的数据,这与结构体对齐有关。