繁体   English   中英

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

[英]C: pointer to struct in the struct definition

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

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

这是我第一次写它,但它不起作用。

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

typedef struct A A;

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

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

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

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

你在A*之前缺少struct

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

你可以不用前瞻声明:

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

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

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

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

清楚地区分_A (在struct命名空间中)和A (在类型命名空间中)。

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

typedef struct {
 values
} NAME;

这是typedef结构的简短方法,我认为它是最简单的符号,只是不要把名称放在前面而是落后。

你可以这样称呼它

NAME n;  

NAME *n; // if you'd like a ptr to it.

这种方法有什么问题吗?

使用以下预处理器:

#define structdef(NAME) typedef struct NAME NAME; struct NAME 

用法:

structdef(node_t)
{
   void* value;
   node_t* next;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM