【发布时间】:2021-06-05 14:54:59
【问题描述】:
我在某处读到,如果您创建用户定义的数据类型(如结构),编译器会将该结构的地址(它是第一个元素)“赋予”结构名称。 struct person p1,p1 也会保存它的地址。
如果这是真的,为什么这段代码不起作用?
main(void) {
typedef struct personne{
char nom [20] ;
char prenom [15] ;
int age ;
char tel[12] ;
} personne ;
personne p;
p->age=10;
printf("%d",p->age);
}
错误消息:'->' 的基本操作数具有非指针类型'personne {aka main()::personne}'
【问题讨论】:
-
p->age=10;不会编译,因为p不是指针。应该是p.age = 10。如果你想要一个指针:personne *p2 = &p;. -
@JohnnyMopp 我知道,这不是我问的
-
不清楚你在问什么。
-
",编译器会将该结构的地址(它的第一个元素)“赋予”结构名称" --> 不正确。
-
那篇文章中的答案是正确的。但是您的代码并不是因为您试图使用
p作为指针 - 它不是。我想你想要personne p; personne *pp = (personne *)(p.nom);请注意,我没有使用p.nom的地址,因为它是一个数组。例如,如果它是int,则需要地址:personne *pp = (personne *)(&p.nom);
标签: c data-structures