读书人

关于链表初始化与创建!

发布时间: 2012-03-03 15:33:03 作者: rapoo

关于链表初始化与创建求助!!!!
typedef struct lnode
{
int data ;
struct lnode *next ;

} lnode , *linklist ; /*linklist是什么意思为啥幺加一个 '* '*/

int initlink(linklist *l) /*为什么不改为Lnode *l*/
{
(*l)=(linklist )malloc(sizeof(lnode));
if(*l==NULL)
return 0;
(*l)-> next=NULL;

}/*为什么不改为int initlink (Lnode *l)
{
l=(linklist )malloc(sizeof(lnode));
if(l==NULL)
return 0;
l-> next=NULL;

}
或者int initlink (linklist l)
{
l=(linklist )malloc(sizeof(lnode));
if(l==NULL)
return 0;
l-> next=NULL;

}*/

int createlink(linklist *l){
linklist head=NULL;
int i,a;
printf( "请输入10个数...\n ");
for(i=0;i <10;i++)
{
(*l)=(linklist )malloc(sizeof(lnode));
scanf( "%d ",&a);
(*l)-> data=a;
(*l)-> next=head ;
head=(*l);

}
return 1;
}
linklist本来就是一个指针 为什么在创建时int createlink(linklist *l)
主要就是‘*l’不懂

[解决办法]
这个问题我也是最近才比较明白一点,所以也说不很清楚。最主要的一点就是,如果你要通过子函数改变一个变量的值,则必须把它的地址作为参数;如果你改变的变量为指针,则必须把该指针的地址作为参数,也就是指针的指针,这也是程序的参数为指针的指针的原因。initlink (Lnode *l)这是传递的参数为结构体的指针,它只能改变结构体的值,而不能改变传递的指针的值,而链表创建的过程中需要改变的是指针的值,所以不能这样传递参数,必须要传递指针的指针。

读书人网 >C语言

热点推荐