【问题标题】:Internal pointer variable for structure in C?C中结构的内部指针变量?
【发布时间】: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


【解决方案1】:

一般来说,程序中的所有变量都会占用一些内存空间。该空间由编译器分配到虚拟内存的已知地址。

所以,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);

现在应该可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多