如何解决C 中结构的内部指针变量?
我在某处读到,如果您创建像结构这样的用户定义数据类型,编译器会将该结构的地址(它是第一个元素)“提供”给该结构的名称。 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}'
解决方法
一般来说,你程序中的所有变量都会占用一些内存空间。该空间由编译器在虚拟内存的已知地址分配。
因此,personne p;
要求编译器在内存中为变量 p
分配足够的空间来保存结构体所有字段的数据。编译器知道变量 p
的地址。您可以随时要求程序将地址作为 &p
提供给您。地址本质上是结构的 pointer
。
'c' 中的变量可以包含数据(作为您的 p
)或一个指针。指针变量保存与另一个变量关联的地址。指针变量也占用内存空间,你也可以得到它的地址。
但在您的情况下,您可以使用以下内容:
personne pstruct; // delcare your struct
personne *p = &pstruct; // delare a pointer to the struct and intialize it with the address of 'pstruct'
p->age=10;
printf("%d",p->age);
现在应该可以了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。