gpt4 book ai didi

c - 通过显式算术计算元素指针是否有效?

转载 作者:行者123 更新时间:2023-12-01 22:50:57 26 4
gpt4 key购买 nike

下面的程序有效吗? (在 ISO C 标准定义良好的意义上,不仅仅是碰巧在特定的编译器上工作。)

struct foo {
int a, b, c;
};

int f(struct foo *p) {
// should return p->c
char *q = ((char *)p) + 2 * sizeof(int);
return *((int *)q);
}

它至少遵循一些明确定义的指针使用规则:

  • 正在加载的值与存储在该地址的类型相同。

  • 计算出的指针的来源是有效的,它是通过添加偏移量从有效指针派生而来的,它给出的指针仍在原始存储实例中。

  • 结构中没有混合元素类型,这会生成填充以使元素偏移不可预测。

但我仍然不确定以这种方式显式计算和使用元素指针是否有效。

最佳答案

C 是一种低级编程语言。此代码定义明确但可能不可移植。它不可移植,因为它对结构的布局做出了假设。特别是,您可能会遇到在 64 位平台上 64 位对齐的字段,其中 in 是 32 位。更好的方法是使用 offsetof马克。

关于c - 通过显式算术计算元素指针是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74396391/

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