typedef struct Node{
    int data;
    struct Node *next;
}Node;
typedef struct{
    int data;
    Node *next;
}Node;

struct Node <name>Node <name>有什么区别? 使用第二个会产生错误.

我对C语言还是个新手,我见过当需要在 struct 定义中定义相同的 struct 时使用的第一个 struct .它实际上是定义了相同的 struct ,还是定义了不同的 struct ?

推荐答案

在C中,在使用之前需要声明一个标识符.标识符可以是变量名、 struct 标记名、类型定义、函数名等.如果没有声明,编译器不可能知道标识符指的是什么.

在您的第一个代码片段中,仅struct Node就将Node声明为struct.因为类型已经声明了(但它的定义仍然不完整,这被称为"不完整类型"),所以可以以有限的方式使用它,包括声明指向该类型的指针的成员. struct 的定义在左方括号处完成.

在第二个代码片段中,声明了一个未命名的 struct ,在使用Node时,没有先前的声明,因此编译器无法确定标识符Node指的是什么,因此不能以代码片段中所示的方式使用它.

C++相关问答推荐

char为16位且Short也为16位的c环境合法吗

为什么这个select()会阻止?

如何创建由符号组成的垂直结果图形?

测量ARM MCU中断延迟的问题

为什么STM32G474RE上没有启用RCC PLL

C中函数类型的前向声明

如何在下面的C代码中正确管理内存?

什么是.c.h文件?

每次除以或乘以整数都会得到0.0000

For循环中的变量行为不符合预期.[C17]

关于scanf()和空格的问题

GCC奇怪的行为,有fork 和印花,有换行符和不换行符

如何在双向表中实现线程安全,每个条目仅使用4位,同时避免任何全局锁?

无法识别C编程语言的语法,如书中所示

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

c如何传递对 struct 数组的引用,而不是设置 struct 的副本

无法理解 fgets 输出

创建 makefile 来编译位于不同目录中的多个源文件

我该如何处理这个 C 90 代码中的内存泄漏?

如何在C中以0x格式打印十六进制值