gpt4 book ai didi

c - 通过同一结构的另一个成员访问一个结构的成员

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:42 27 4
gpt4 key购买 nike

假设我们有以下代码:

typedef struct
{
int a1;
int a2;
} a_struct;

int prev (int a2)
{
int* p = &A_STRUCT-4;
return *p;
}

int main(void)
{
a_struct aStruct[] = {5, 10}; // Array-type initializing

printf("aStruct.a1 = %i", prev(aStruct->a2));

return 1;
}

我试图通过访问 aStruct.a2 内存地址并取消引用它来访问 aStruct.a1 的值,但是按照这种方式,它会导致 u/b 和运行时并发症。一言以蔽之,行不通。我做错了什么?

最佳答案

有两个不同的问题。首先,您传递字段的,而不是它的地址

其次,假设您有结构字段的地址,您可以借助 offsetof 获得指向结构本身的指针。宏观:

int prev(int* pa2)
{
size_t offset = offsetof(a_struct, a2);
a_struct* p = (a_struct*)((char*)pa2 - offset);
return p->a1;
}

....

printf("aStruct.a1 = %i\n", prev(&aStruct->a2));

关于c - 通过同一结构的另一个成员访问一个结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26766044/

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