引用在链表中的应用

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
struct book
{
	int name;                                        //问题:链表引用问题 
	struct book *next;
};
typedef book *b;

                            //定义结构体



createhead(b &head)//这里必须加引用
{
	
	head=(b)malloc(sizeof(book));
	if(!head) // 存储分配失败                              
	{
		exit(0);
	}
	head->next=NULL;
}

addbody(b head,int a)//这里可不加引用
{   
	b l,pnew,ptail;
	l=head;
	while(l->next)
	{
		l=l->next;
	}
    pnew=(b)malloc(sizeof(book));
	pnew->name=a;
	pnew->next=NULL;
	l->next=pnew;
}

void main()
{

	int a,n;
	b head,i;
	createhead(head);
	scanf("%d",&n);
	while(n)
	{
		scanf("%d",&a);
	    addbody(head,a);
		n--;
	}
	i=head->next;
	while(i)
	{ 
		printf("%d ",i->name);
		i=i->next;
	}
}


    
	

    



	
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:

    1.用结构体变量名作参数。一般较少用这种方法。
    2.用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
    3.用结构体变量的引用变量作函数参数


typedef LNode *LinkList;这样定义后linklist就为一个结构体指针,

开辟空间时(linklist)malloc。。。那个linklist后面就不用加星号了

也可以typedef struct LNode{

...

}*LinkList

效果是一样的


总结:

第一个传参:

结构体指针做调用函数的参数时,为了能在主函数中保持改变,形参必须是指针的指针或者引用。

和非指针变量作参数一样,要想在主函数中通过调用函数来改变某值,必须传过来指针。而指针做参数时,必须传过来指针的指针。

第二个传参:

因为头节点没必要改变,所以直接传指针,不用引用。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值