C中定义链表的有关问题
C中定义链表的问题#includestdio.h#includestdlib.hstruct list{int astruct list *next}struct li
C中定义链表的问题
#include<stdio.h>
#include<stdlib.h>
struct list{
int a;
struct list *next;
};
struct list * node()
{
return (struct list *)malloc(sizeof(struct list));
}
int main()
{
struct list *l = node();
return 0;
}
上面代码在gcc 4.8.1下编译通过了
但是我看到好多其他的代码都不是struct list *l而是list *l
我去掉struct 之后编译错误。。
求教是编译器版本问题吗?
[解决办法]#include<stdio.h>
#include<stdlib.h>
struct list{
int a;
list *next;
};
list * node()
{
return (list *)malloc(sizeof(list));
}
int main()
{
list *l = node();
return 0;
}
刚试过,加不加struct在VS2008中均编译通过
[解决办法]建议用typedef 将 struct list定义为自定义类型 list ,就会更有通用性,只写 list 即可;
如果不这样,就不具有通用性,而且也不符合ANSI中C语言结构体的定义,若使用code::blocks等IDE编译时就会出错,因为IDE不认识list,只有用struct list,IDE才认识。
#include <stdio.h>
#include <stdlib.h>
typedef struct list{
int a;
struct list *next;
}list;
struct list * node()
{
return (list *)malloc(sizeof(list));
}
int main()
{
list *l = node();
return 0;
}
[解决办法]C 加struct list 才是一种类型。
struct alist{ int a; struct alist *next; };
C++ ,alist 就是struct alist 都是类型名。
另外 C++标准库有个 list 模板
所以,一般类型定义,不要定义成list 这样的名字。
你把你的程序,分别存为 .c ,.cpp
用C,C++编译器分别编译一下,看看。
C一般不能通过,C++一般可以通过。
C++ ,struct,union,class ,enum 类型定义后,不需要加struct,union,class ,enum 等 类型关键字 就是类型名字。
C一般必须加类型名,才是一个完整的类型名字。