首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C中定义链表的有关问题

2013-10-12 
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一般必须加类型名,才是一个完整的类型名字。
 

热点排行
Bad Request.