struct指针类型的问题

蓝粽子 2014-02-16 07:45:30


//代码片段
//定义链表结构体
typedef struct
{
DataType data;
struct LinkNode* next;

}LinkNode;

typedef LinkNode* LinkList;

....
//在使用代码中有如下片段
tempNode->next = malloc (sizeof(LinkNode));
tempNode = tempNode->next;


编译时代码片段会出现如下警告
Description Resource Path Location Type

incompatible pointer types assigning to 'LinkNode *' from 'struct LinkNode *' [-Wincompatible-pointer-types] LinkListOperator.c /DataStructure/src/LinearList/LinkList line 23 C/C++ Problem

Description Resource Path Location Type
incompatible pointer types assigning to 'struct LinkNode *' from 'LinkNode *' [-Wincompatible-pointer-types] LinkListOperator.c /DataStructure/src/LinearList/LinkList line 22 C/C++ Problem

两个指针类型的问题,那么请问 struct LinkNode* 与 LinkNode* 声明的变量有何不同?编译器为何认为他们是不同类型的指针?

...全文
291 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝粽子 2014-02-17
  • 打赏
  • 举报
回复
引用 2 楼 steedhorse 的回复:
你的struct本身是匿名的,它只有一个typedef出来的名字叫LinkNode。 既然LinkNode已经是一个类型名,为什么定义成员变量的时候还使用“struct”?
多谢,懂了。
蓝粽子 2014-02-17
  • 打赏
  • 举报
回复
引用 1 楼 u012210441 的回复:
因为你用tyepedef定义了一个新类型,后面用到它是不用struct的
多谢,懂了。
蓝粽子 2014-02-17
  • 打赏
  • 举报
回复
thank all, 因为我使用的是,typedef struct名称,所以会出现警告。多谢多谢各位。
Gonefar 2014-02-17
  • 打赏
  • 举报
回复
typedef struct _LinkNode
{
    DataType data;
    struct _LinkNode* next;
 
}LinkNode;
一般是这样写的,注意与你的区别。
buyong 2014-02-17
  • 打赏
  • 举报
回复
struct LinkNode
{
    DataType data;
    struct LinkNode* next;
 
};
蓝粽子 2014-02-17
  • 打赏
  • 举报
回复
引用 1 楼 u012210441 的回复:
因为你用tyepedef定义了一个新类型,后面用到它是不用struct的
嗯,也没有用到,只是在next赋值的时候出现的警告,我把代码贴全了一些。 帮我看看,完全不知道怎么避免这个警告。
蓝粽子 2014-02-17
  • 打赏
  • 举报
回复
引用 2 楼 steedhorse 的回复:
你的struct本身是匿名的,它只有一个typedef出来的名字叫LinkNode。 既然LinkNode已经是一个类型名,为什么定义成员变量的时候还使用“struct”?
我再贴的全一些。


...
LinkNode* tempNode = charsList;

	while(tempNode->data != '\n')
	{
		tempNode->next = (LinkNode*) malloc (sizeof(LinkNode));
		tempNode = tempNode->next;

		int tempData = getchar();
		tempNode->data = tempData;
	}

	tempNode->next = NULL;
正如你所说的,我并没有在使用过程中用 struct ListNode* 来进行变量声明,但由于结构体中的 变量声明为struct ListNode*, 所以next指针赋值时会出现警告。
晨星 2014-02-16
  • 打赏
  • 举报
回复
你的struct本身是匿名的,它只有一个typedef出来的名字叫LinkNode。 既然LinkNode已经是一个类型名,为什么定义成员变量的时候还使用“struct”?
zx_love 2014-02-16
  • 打赏
  • 举报
回复
因为你用tyepedef定义了一个新类型,后面用到它是不用struct的

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧