在链表初始化中学习函数参数(二级指针)

在最近链表初始化时发现自己的代码总会出现问题,仔细检查后发现自己的函数参数上的基础,特别是二级指针的理解上不是特别到位,故写下这篇总结

首先,最重要的本质:
一切函数参数的传递都是值的传递

在传入参数时,函数会临时占据一片空间来储存这个值,在函数结束时这片空间便会被回收,这便是变量的时间域。所以想要在函数内部对变量进行操作,传入的值不能够被改变,并且可以对想要改变的变量进行操作,这时就可以使用指针传递参数,也就是传递地址。

但在初始化链表时,我们需要在函数内部为新创建的头节点分配内存,这时候其实就是要对存储的地址B进行操作(如图),这时候我们如果传入的是b的指针,也就是是b的地址,就会导致分配的空间在函数结束时马上就被回收。这个时候,我们传入的就不应该是变量的指针,而是变量指针的指针(在这个地方其实变量就成了指针变量)即二级指针

 最终,我们实现的代码如下所示

#include <stdio.h> 
#include <stdlib.h> 

typedef struct Node{
	int coef;//系数 
	int exp;//指数
	struct Node *next;
}Node,*LinkList;

void InitList(LinkList *L);

int main(){	
	InitList(&L); 
	return 0;
} 


void InitList(LinkList* L){
	*L=(Node*)malloc(sizeof(Node));
	(*L)->next=NULL;
}

 这个时候,我们应该传入一个二级指针,在main函数中的实参就应该是&L

当然也有另外一个方法进行初始化可以避免使用二级指针,就是不使用函数参数而是使用函数的返还值,列在下面

#include <stdio.h> 
#include <stdlib.h> 

typedef struct Node{
	int coef;//系数 
	int exp;//指数
	struct Node *next;
}Node,*LinkList;

Node* _head();


int main(){
	Node* L = _head();
    return 0;
} 


Node* _head() {
	Node* L;
	L= (Node*)malloc(sizeof(Node));
	if (L == NULL)
		exit(-1);							
	L->next = NULL;
	return L;
}
//初始化链表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值