ing 发表于 2020-2-29 23:40

我模糊了C结构体变量和结构体标签的区别


因为我结构体没写标签名,然后出现了这种情况




补上之后,警告信息消失了


结构体的标签名和变量名的区别?为什么漏写标签名会导致类型不匹配

hs_f 发表于 2020-3-1 00:13

学习经验,有助益。

eWVhaA 发表于 2020-3-1 00:17

本帖最后由 eWVhaA 于 2020-3-1 00:19 编辑

在 typedef 之前,ArcNode是没被定义的,换句话说你的定义和下面等同
typedef struct
{
int a;
struct A *next;
} ArcNode;

给 ArcNode 结构体里嵌套了一个next指针指向空结构体A,下面要用next的时候当然报错

这个东西本来等同两句话

struct Node {
xxxxxx
};
typedef struct Node ArcNode;

absman1972 发表于 2020-3-1 00:50

本帖最后由 absman1972 于 2020-3-1 00:51 编辑

重點前面的網友已說明了
為了避免結構名稱及型態名稱的誤用,建議改成類似的寫法

typedef struct _ArcNode
{
   int adjvex;
   _ArcNode* next;
}ArcNode;


或是

typedef struct Node
{
   int adjvex;
   Node* next;
}ArcNode;

APWN 发表于 2020-3-1 01:24

感觉又学到了点点

一人之下123456 发表于 2020-3-1 07:25

观摩大佬们交流,学习学习

cjhk 发表于 2020-3-1 09:15

本帖最后由 cjhk 于 2020-3-1 09:16 编辑

structNode
{
   int adjvex;
   Node* next;
}ArcNode;

typedef struct
{
   int adjvex;
   Node* next;
}ArcNode;的比较,前者的Node和后者ArcNode是一回事。typedef和结构体结合之后,结构体变量名等同于结构体类型名。

cjhk 发表于 2020-3-1 09:19

C语言和C++语言有些关键字或者语法是存在二义性的,不够严谨,这是C语言本身的缺陷。比如说static关键字,或者说数组下标越界,以及上面的结构体变量名和结构体类型名等。
慢慢磨吧,经验多了,慢慢就上手了。

ywcn 发表于 2020-3-1 09:44

类型名和变更名可以一样吗?

ConMedExer 发表于 2020-4-7 22:30

好贴,初入C语言,受益匪浅
页: [1]
查看完整版本: 我模糊了C结构体变量和结构体标签的区别