c语言函数返回值的几种方式,入参方式回传数据

文章讨论了在C/C++中,如何通过函数参数传递变量的地址,包括直接使用指针和二级指针。作者指出,通常一级指针已经足够用于传递和修改函数内外的变量值,而二级指针在这种情况下显得多余。示例代码展示了正常返回值、地址传入和指针传入的函数调用方式,并特别提到了二级指针在未有效利用其特性时的无效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在正常使用过程中,突然发现有用二级指针传递地址,我想没必要用二级指针,实际目的是函数入参的参数,也是函数出参的参数

作为参数传入func
退出func
指针初始化为空
func内申请内存
已申请到内存继续使用

例子

函数正常返回值方式

正常的都是使用返回值的方式

int func(void)
{
	return 10;//这个就是返回的值
}
int main(int argc, char *argv[])
{
	int val = func();//val = 10
	return 0;
}

地址方式传入

void func(int address)
{
	*(int*)address = 10;//地址作为参数传入,强制转换为指针,指针上的值改变为10
}
int main(int argc, char *argv[])
{
	int val = 100;
	func(&val);//val = 10
	return 0;
}

这里默认地址长度为 int 大小,这里是传入地址,func 对地址值 上的数据改变,退出函数后地址值上的数据已经被改变。

指针方式传入

char tmp[] = "12345679";
void func(void* address)
{
	*(char*)address = tmp;//address是val的地址,强制转换对地址上值操作,就是改变val地址上的值,就是val
}
int main(int argc, char *argv[])
{
	char* val = NULL;//指针初始化为NULL,实际是val=NULL,val的地址是固定值
	func(&val);//应传入val的地址
//	func(val);//这个是错误的,因为val是NULL
	return 0;
}

这里具体应用是传入地址,func可以申请内存,可以操作内容

二级指针

char tmp[] = "12345679";
void func(void** address)
{
	*address = tmp;//address是val的地址,对地址上值操作,就是改变val地址上的值,就是val
}
int main(int argc, char *argv[])
{
	char* val = NULL;//指针初始化为NULL,实际是val=NULL,val的地址是固定值
	func(&val);//应传入val的地址
//	func(val);//这个是错误的,因为val是NULL
	return 0;
}

实际上和上面效果一样,我认为此时这样使用就没必要了,二级指针没发挥作用。

入参的值

void func1(void* address);
void func2(void** address);
void func3(void*** address);
int main(int argc, char *argv[])
{
	char* val = NULL;
	func1(&val);
	func2(&val);
	func3(&val);
	return 0;
}

以上,实际上 三个func的入参 address 都是 &val ,是 val 的地址
在这里插入图片描述
对应关系如图,这样就清晰多了

后记

我觉得二级指针不好,看各个人的所爱了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值