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);

现在应该可以了。