我模糊了C结构体变量和结构体标签的区别
因为我结构体没写标签名,然后出现了这种情况
补上之后,警告信息消失了
结构体的标签名和变量名的区别?为什么漏写标签名会导致类型不匹配 学习经验,有助益。 本帖最后由 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:51 编辑
重點前面的網友已說明了
為了避免結構名稱及型態名稱的誤用,建議改成類似的寫法
typedef struct _ArcNode
{
int adjvex;
_ArcNode* next;
}ArcNode;
或是
typedef struct Node
{
int adjvex;
Node* next;
}ArcNode;
感觉又学到了点点 观摩大佬们交流,学习学习 本帖最后由 cjhk 于 2020-3-1 09:16 编辑
structNode
{
int adjvex;
Node* next;
}ArcNode;
和
typedef struct
{
int adjvex;
Node* next;
}ArcNode;的比较,前者的Node和后者ArcNode是一回事。typedef和结构体结合之后,结构体变量名等同于结构体类型名。 C语言和C++语言有些关键字或者语法是存在二义性的,不够严谨,这是C语言本身的缺陷。比如说static关键字,或者说数组下标越界,以及上面的结构体变量名和结构体类型名等。
慢慢磨吧,经验多了,慢慢就上手了。 类型名和变更名可以一样吗? 好贴,初入C语言,受益匪浅
页:
[1]