函数形参 LNode* L和LNode* &L的区别

最近有人问我LNode* L和LNode* &L的区别
很简单 这种区别很微小 要联系到具体运用上
废话不说 上代码

#include<stdio.h> 
#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode* next;
}LNode,*Linklist;
int pr(Linklist &L);
int main() {
	LNode* L=NULL; 
	printf("传入前指针存储地址%p\n",L);
	pr(L);//传入指针存储的地址
	printf("传入后指针存贮地址%p\n",L);
}

int pr(LNode* &L){
	L=(LNode*)malloc(sizeof(LNode));
	L->data=10;
	printf("函数内分配内存后----指针存储地址%p\n",L);
	printf("%d\n",L->data);
	return 0;
}

在这里插入图片描述

加了&符号 函数操作后 函数内指针L存储的地址变化 会自动更新到主函数的L身上
所以一般加&符号是为了生成无头结点链表
或者 初始化链表;

再来看看不加&符号的代码

#include<stdio.h> 
#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode* next;
}LNode,*Linklist;
int pr(Linklist L);
int main() {
	LNode* L=NULL; 
	printf("传入前指针存储地址%p\n",L);
	pr(L);//传入指针存储的地址
	printf("传入后指针存贮地址%p\n",L);
}

int pr(LNode* L){
	L=(LNode*)malloc(sizeof(LNode));
	L->data=10;
	printf("函数内分配内存后----指针存储地址%p\n",L);
	printf("该结构体值%d\n",L->data);
	return 0;
}

在这里插入图片描述
很显然 LNode 无法做到自动更新 这个时候主函数的地址依旧我行我素

有人问我要是这种情况怎么解决 相当简单 除了加&外 就是将函数修改成这样
没错就是再赋一遍值 简单粗暴 人类的脑瓜永远为简单粗暴而生

#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode* next;
}LNode,*Linklist;
LNode* pr(Linklist L);
int main() {
	LNode* L=NULL; 
	printf("传入前指针存储地址%p\n",L);
	L=pr(L);//传入指针存储的地址
	printf("传入后指针存贮地址%p\n",L);
}

LNode* pr(LNode* L){
	L=(LNode*)malloc(sizeof(LNode));
	L->data=10;
	printf("函数内分配内存后----指针存储地址%p\n",L);
	printf("该结构体值%d\n",L->data);
	return L;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值