链表-就传参传值记录((*l)/(*&l))

class line
{	
	int data;
	line * next;
};

void build(line *l,int n)//build line
{
line *p;
for(int i=0;i<n;i++)
{p=new line;//set new data
p->data=i+1;
l->next=p;
l=l->next;}
}
 
 
void build(line *&l,int n)//build line
{
	line *p,*e;
        p=l;
	for(int i=0;i<n;i++)
	{
	e=new line;//set new data
	e->data=i+1;
	p->next=e;
	p=p->next;
	}
}

本人使用第一种方式给传入指针进行尾接法,效果与教材所写的第二种传址相同,所以认为一般使用第一种方案更加简便

希望对在指针这块有疑惑的朋友有帮助

第1种:指针传入,我们的指针会将在主函数指向的对应地址传入——由于子函数结束没有返回值,在子函数中传入的指针参数 *l 指向地址虽然在实现尾接中不断改变,但是在主函数中*l 指向地址依然没有变化,所以当子函数结束调用,主函数中的*l 依然指向链表的指定位置(一般设置指向头结点)。在主函数中,也可以调用出在子函数中设置的*l ->next ,因为子函数中设置存放的为堆,不受子函数结束释放内存的限制。

第2种:如果是把地址传入,自然是希望在子函数中使用后传出某一地址信息。在上述代码中没有实现,它传出的地址依然没有改动。但是在使用时,我们可以在子函数中更改*l的地址信息,将符合需要的地址交到*l 传出。例如更改过后:

void build(line *&l,int n)//build line
{
        line *p;
	for(int i=0;i<n;i++)
	{
	p=new line;//set new data
	p->data=i+1;
	l->next=p;
	l=l->next;
	}
}
传出得到的就是尾部结点的地址信息了^-^


猜你喜欢

转载自blog.csdn.net/weixin_38076067/article/details/78982569
今日推荐