#include<stdio.h>
typedef struct
{
int *u;
struct node next;
} *node;
int main()
{
return 0;
}
这里是什么意思*node
?我不明白。我认为这里应该有一个节点,但无论如何它正在编译。
#include<stdio.h>
typedef struct
{
int *u;
struct node next;
} *node;
int main()
{
return 0;
}
这里是什么意思*node
?我不明白。我认为这里应该有一个节点,但无论如何它正在编译。
这里typedef
定义了一个新类型,node
,它是一个指向结构的指针。
问题中的代码可能无法编译,因为struct node
似乎没有在任何地方定义,但它在结构内部使用。
这里的问题:
typedef struct
{
int *u;
struct node next; //struct node is NOT defined.
} *node;
这是错误的:
它应该是 :
typedef struct node{
int *u;
struct node *next;
}*nodeptr;
这段代码意味着“nodeptr”是一个指向struct node;
正确的定义是:
typedef struct Node {
int *u;
struct Node *next;
} *node;
在您的代码中,结构声明存在问题;语法是:
struct identifier/tag {struct declaration list}
结构声明列表是结构成员的一系列声明;
typedef 声明提供了一种创建别名的方法,即类型的同义词;语法是:
typedef type alias
错误在哪里?
typedef struct {
在这种情况下,没有别名!
就个人而言,我从未见过这种声明。这使用类似于:
typedef struct {
int *u;
struct node *next;
} node;
这很简单:您正在定义一个结构,其中包含一个指向整数的指针和一个指向同一结构的另一个元素的指针。
比较一下:
typedef int * pointer_to_int;
在这里,星号是被赋予新名称的类型的一部分,即pointer_to_int
是类型的别名int *
。
与您的示例完全一样!星号是类型的一部分,因此它node
成为类型的别名pointer to struct node { int *u; struct node *next; }
。
另外,请注意,在 中包含星号通常不是一个好主意typedef
,因为它会使代码更难使用。在 C 中,知道变量是否是指针通常非常有趣,因此隐藏这一事实并不是很有帮助。