我最近发现了这个页面:使PyObject_HEAD符合标准C,我对其中的一段话很感兴趣:
“标准C有一个特定的例外,旨在支持Python的情况,即结构类型的值也可以通过指向第一个字段的指针访问。例如,如果一个结构以int开头,则struct *也可以转换为int *,从而允许将int值写入第一个字段。”
因此,我编写了这段代码来检查我的编译器:
“标准C有一个特定的例外,旨在支持Python的情况,即结构类型的值也可以通过指向第一个字段的指针访问。例如,如果一个结构以int开头,则struct *也可以转换为int *,从而允许将int值写入第一个字段。”
因此,我编写了这段代码来检查我的编译器:
struct with_int {
int a;
char b;
};
int main(void)
{
struct with_int *i = malloc(sizeof(struct with_int));
i->a = 5;
((int *)&i)->a = 8;
}
但我收到了错误信息:请求在非结构体或联合体中访问成员“a”。
上面的段落是否理解正确?如果不是,请指出我做错了什么? 另外,如果有人知道C标准是参考这个规则,请在此指出。谢谢。
((int *)&i)
改为((int *)i)
。 - Haris*(int *)&i
- Archie Gertsman*(int *)i
, 对吗? - Archie Gertsman