gpt4 book ai didi

c - 结构体内部变量的地址计算

转载 作者:行者123 更新时间:2023-11-30 15:10:27 24 4
gpt4 key购买 nike

这是我的代码。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

struct test
{
unsigned int x;
long int y: 32;
unsigned int z;
};

int main()
{
struct test t;
unsigned int *ptr1 = &t.x;
unsigned int *ptr2 = &t.z;
printf("ptr1 address is %p\n", ptr1);
printf("ptr2 address is %p\n", ptr2);
printf("size: %d", ptr2 - ptr1);
return 0;
}

这是输出:

ptr1 address is 0028FEDC
ptr2 address is 0028FEE4
size: 2

我认为我对输出的理解遗漏了一点。我预计输出为 4。因为 long int 在我的机器上占用 4 个字节。我得到了 x 和 z 的地址之间的差异。然而,不是真正的输出,我手动减去x和z的地址得到的输出没有任何意义。如果你看到上面的内容,根据我的计算,28FEE4-28FEDC = 8,但输出是2。谁能告诉我哪里计算错了?

最佳答案

为了解释该行为,您可以像这样查看您的结构:

+---+---+---+| x | y | z |+---+---+---+^       ^|       |&t.x    &t.z

&t.x&t.z 之间的区别是两个元素,第一个元素来自 &t.x > 到 &t.y,然后从 &t.y&t.z

应该注意的是,这有效,因为所有三种类型的大小相同,并且编译器没有在结构内添加任何填充。

关于c - 结构体内部变量的地址计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132789/

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