首页 > 解决方案 > c语言结构中的内存分配

问题描述

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

标签: cpointers

解决方案


您似乎将地址与大小混淆了。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 字节的数据,这与结构体对齐有关。


推荐阅读