当前位置:  开发笔记 > 程序员 > 正文

C:结构定义中指向struct的指针

如何解决《C:结构定义中指向struct的指针》经验,为你挑选了5个好方法。

如何在此结构的定义中指向下一个结构的指针:

typedef struct A {
  int a;
  int b;
  A*  next;
} A;

这是我第一次写它但它不起作用的方式.



1> CB Bailey..:

您可以定义typedef并在一个语句中首先声明struct,然后在后续定义中定义struct.

typedef struct A A;

struct A
{
    int a;
    int b;
    A* next;
};

编辑:正如其他人所提到的,如果没有前向声明,结构名称在结构定义中仍然有效(即可以使用struct A),但是在typedef定义完成之后,typedef才可用(因此使用just A将无效).仅使用一个指针成员,这可能并不重要,但如果您有一个包含大量自我类型指针的复杂数据结构,则可能不那么狡猾.


放松:C的许多编码风格约定强烈反对类型定义结构.我不会说这是规范的.
@ephemient为什么我不能隐藏它?他们只是实施细节.
如果我可以投票评论,Chris Young会获得+1.原生类型和聚合结构之间存在巨大差异.**不要**隐藏在typedef后面.

2> Chris Young..:

除了第一个答案,没有typedef和forward声明,这也应该没问题.

struct A 
{ 
    int a; 
    int b; 
    struct A *next; 
};



3> Miles D..:

你错过了struct之前的A*

  typedef struct A {
    int a;
    int b;
    struct A* next;
  } A;



4> qrdl..:

你可以不用前瞻声明:

struct A {
    int a;
    int b;
    struct A *next;
};



5> ephemient..:

拜托,你是C,而不是C++.

如果你真的必须键入一个结构(并且我使用的大多数程序员不会¹),请执行以下操作:

typedef struct _A {
    int a;
    int b;
    struct _A *next;
} A;

明确区分_A(在struct命名空间中)和A(在类型命名空间中).

¹ typedef隐藏了它指向的类型的大小和存储 - 论证(我同意)是在像C这样的低级语言中,试图隐藏任何东西是有害的,适得其反.习惯了打字struct A时,你的意思struct A.


_A是保留名称.A_没问题.
"struct A"如何告诉我它的大小?
Nitpick:_A是一个坏名字:前导下划线属于编译器.[编辑]该死的,我想我只是回应了MSalters.
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有