C 结构基础(结构作为指针) #包括 类型定义结构 { 国际*u; 结构节点下一步; }*节点; int main() { 返回0; }
这里的C 结构基础(结构作为指针) #包括 类型定义结构 { 国际*u; 结构节点下一步; }*节点; int main() { 返回0; },c,C,这里的*节点是什么意思?我不明白。我认为这里应该有一个节点,但它仍然在编译。这里typedef定义了一个新类型,node,它是指向结构的指针 问题中的代码可能无法编译,因为struct node似乎没有在任何地方定义,但它在结构内部使用。比较如下: #include<stdio.h> typedef struct { int *u; struct node next; } *node; int main()
*节点是什么意思?我不明白。我认为这里应该有一个节点,但它仍然在编译。这里typedef
定义了一个新类型,node
,它是指向结构的指针
问题中的代码可能无法编译,因为struct node
似乎没有在任何地方定义,但它在结构内部使用。比较如下:
#include<stdio.h>
typedef struct
{
int *u;
struct node next;
} *node;
int main()
{
return 0;
}
在这里,星号是被赋予新名称的类型的一部分,即指针指向int
是类型int*
的别名
以你的例子来说,完全一样!星号是类型的一部分,因此node
成为指向结构节点{int*u;struct node*next;}
的类型指针的别名
另外,请注意,在typedef
中包含星号通常是个坏主意,因为它会使代码更难使用。在C语言中,知道变量是否是指针通常是非常有趣的,因此隐藏这一事实并没有多大帮助。正确的定义是:
typedef int * pointer_to_int;
在代码中,结构声明中存在问题;语法是:
typedef struct Node {
int *u;
struct Node *next;
} *node;
struct identifier/tag {struct declaration list}
结构声明列表是结构成员的一系列声明
typedef声明提供了一种创建别名的方法,别名是类型的同义词;语法是:
typedef struct Node {
int *u;
struct Node *next;
} *node;
struct identifier/tag {struct declaration list}
错误在哪里
typedef type alias
在这种情况下,没有别名 这里的问题:
typedef struct {
这是错误的:
应该是:
typedef struct
{
int *u;
struct node next; //struct node is NOT defined.
} *node;
这段代码意味着“nodeptr”是指向struct节点的指针代码>就我个人而言,我从未见过这种声明。这通常类似于:
typedef struct node{
int *u;
struct node *next;
}*nodeptr;
这很简单:定义一个结构时,指针指向一个整数,指针指向同一结构的另一个元素。不推荐使用家庭作业
标记。不要用它。@KirilKirov,大概一个月前吧。你错过了右边的信息。有人试图用这个标签来澄清问题。@KirilKirov:哇,14秒内有3个答案:)谢谢,我错过了。关于你做了什么和为什么做了什么?Surai Menon也许你对a感兴趣:我不是要求自己解释。只是对OP来说,你的答案可能没有多大帮助。这只是节点的正确构造,有什么问题吗?我不明白你想要什么!我只是指出答案不完整,OP可能不清楚。在您的代码中,struct
是匿名的。因此,字段next
不是指向类似struct
的指针,而是指向未定义的struct节点的指针。typedef
与struct
本身的名称没有任何关系(typedef struct{…}名称
或多或少等同于struct\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuanonymous};typedef struct\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu