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