问题描述
- 在GCC上的C语言编程错误问题
-
#include
#include
#include
struct LinkList
{
int data;
struct LinkList next;
};
struct LinkList Reverse ( LinkList *list ) *出错**
{
LNode *tmp = NULL;
LNode *p = NULL;if (list == NULL) { return NULL; } tmp = list->next; while (tmp->next != NULL) { p = tmp->next; tmp->next = p->next; p->next = list->next; list->next = p; } return list;
}
int main( )
{
int i=0;
int b;
struct LinkList *L;
struct LinkList *p;
struct LinkList *q;p=L->next;
while (b!= -1)
{
while( scanf("%dn",&b)&&(b>0) )
{ p->data=b;
p=p->next;
i++;
}
}struct LinkList Reverse ( LinkList L ); *出错**
q=L->next;
while(i>=0)
{
printf("%dn",q->data);
i--;}
return 0;
}为什么会提示
Main.c:31: error: expected ‘)’ before ‘*’ token
Main.c: In function ‘main’:
Main.c:68: error: expected ‘)’ before ‘*’ token
解决方案
struct LinkList Reverse ( LinkList L ); 出错*
q=L->next;//这样操作不对
因为,你把 LinkList定义为结构体类型,相应的L就是结构体变量
struct LinkList
{
int data;
struct LinkList next;
};
next是结构体L的成员,C语言访问结构体成员的方式是:L.next;
或者你把L定义为指针变量:LinkList *L,这样你可以通过->来访问L指向的结构体的成员L->next。
解决方案二:
LNode的定义在哪里。
用ideone.com或者codepad.com在线编译看看。
http://ideone.com/WJp5rS
没有你说的错误
解决方案三:
你的next应该定义成指针类型
struct LinkList *next
函数返回值也应该是指针
解决方案四:
Reverse()函数应该返回指针,而且在结构体定义的时候应该注意,结构体不可以包含自身的实例,但是确可以包含指向自身实例的指针。所以你一开始,
定义的结构体就是错的。
解决方案五:
函数定义的时候,形参类型要写对,调用的时候,直接写定义好的实参。
比如:
struct LinkList Reverse ( struct LinkList *list )
没有LinkList这个数据类型
struct LinkList Reverse ( L );
调用的使用不需要数据类型