gpt4 book ai didi

c - 为什么 c = 4 而不是 1 的结构中字符和 int 地址的差异

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:04 25 4
gpt4 key购买 nike

我在下面的代码中给出了以下输入
12.5 12
b 13.5 13
c 14.5 14

#include <stdio.h>
int main(){

struct book
{
char name;
float price;
int pages;
};

struct book b1,b2,b3;



printf("enter name , price ,& no of pages\n");
scanf(" %c %f %d",&b1.name,&b1.price,&b1.pages);



scanf(" %c %f %d",&b2.name,&b2.price,&b2.pages);


scanf(" %c %f %d",&b3.name,&b3.price,&b3.pages);



printf("%c %d %f %d %d %d",b1.name,&b1.name,b1.price,&b1.price,b1.pages,&b1.pages);

printf("\n%c %d %f %d %d %d",b2.name,&b2.name,b2.price,&b2.price,b2.pages,&b2.pages);

printf("\n%c %d %f %d %d %d",b3.name,&b3.name,b3.price,&b3.price,b3.pages,&b3.pages);

printf("\n%d %d %d",sizeof(b1.name),sizeof(b1.price), sizeof(b1.pages));

}

我得到了以下输出

一个 2686740 12.500000 2686744 12 2686748
b 2686728 13.500000 2686732 13 2686736
c 2686716 14.500000 2686720 14 2686724
1 4 4

现在我无法理解的是 b1.name(2686740) 和 b1.price(2686744) 地址之间的差异是 4,其中 b1.name 是一个字符,所以差异应该是 1 并且相同在 b2 和 b3 中也重复。请帮忙!!!

最佳答案

这是因为结构padding

计算机处理器的架构是这样一种方式,它可以一次从内存中读取一个单词。

为了利用处理器的这一优势,数据总是对齐为 4 字节包,这导致在其他成员的地址之间插入空地址。例如,在 64 位系统上,int 应该从可被 4 整除的地址开始,long 被 8 整除,short 被 2 整除。

内边距默认开启。它将以下间隙插入到您的第一个结构中:

struct book
{
char name;
char padded_gap[3]; //padding extra 3 bytes
float price;
int pages;
};

关于c - 为什么 c = 4 而不是 1 的结构中字符和 int 地址的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51806596/

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