Declaration syntax Error

来源:百度知道 编辑:UC知道 时间:2024/05/15 11:27:54
#include <stdio.h>
#include <stdlib.h>

struct LNode {
int data;
struct LNode *next;
};

LNode *MergeList(LNode *headA, LNode *headB)
{
LNode *pC,*pnC;
LNode *pA = headA->next;
LNode *pB = headB->next;
LNode *hC = (struct LNode *)malloc(sizeof(LNode));
hC->next = NULL;
pC = hC;
while(pA != NULL && pB != NULL)
{
if(pA->data < pB->data)
{
if(pA->data != pC->data)
{
pnC = (struct LNode *)malloc(sizeof(LNode));
pnC->data = pA->data;
pC->next = pnC; pC = pnC; pC->next = NULL;
}
pA = pA->next;
}
else
{
if(pB->data != pC->data)
{
pnC = (struct LNode *)malloc(sizeof(LNode));
pnC->data = pB->data;
pC->next = pnC; pC = pnC; pC->next = NULL;
}
pB = pB->next;
}
}
i

已编译通过,0警告0错误。
将:
struct LNode {
int data;
struct LNode *next;
};
改成:
typedef struct LNode {
int data;
struct LNode *next;
}LNode;
就可以了。
当然也有其他的改法,不过这个是最简单的。
具体的解释请参考下面这个问题:

声明struct x1 { . . . }; 和typedef struct { . . . } x2; 有什么不同?
第一种形式声明了一个“结构标签”; 第二种声明了一个“类型定义”。主要的区别是在后文中你需要用“struct x1” 引用第一种, 而用“x2” 引用第二种。也就是说, 第二种声明更像一种抽象类新—– 用户不必知道它是一个结构, 而在声明它的实例时也不需要使用struct 关键字。

这就是你的程序不能被编译通过的原因。

什么意思?可以编译通过啊