c 函数值传递

首先要清楚什么叫函数的形参和实参。
形参:任何函数实现的参数都是形参。
实参:调用函数时候,传入的参数是实参。
实参可以给形参传参,形参不能够给实参传参。

#include <stdio.h>

void exchange(int a,int b)
{
	int t;
	printf("&a = %p,&b = %p\n",&a,&b );	

	t = a;
	a = b;
	b = t;

	printf("a = %d,b = %d\n",a,b );	

}

int main(int argc, char const *argv[])
{
	int m = 10;
	int n = 20;

	exchange(m,n);
	printf("&m = %p,&n = %p\n",&m,&n );
	printf("m = %d,n = %d\n",m,n );	

	return 0;
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lJQEBVQ-1589958414642)(https:/img-blog.csdnimg.cn/20200520145340787.png)]
上述代码,exchange中的a,b是形参,m,n是实参。
可以看出在exchange中,a,b和main函数中的m,n并不是同一块地址。
此时调用exchange的时候,传入的m,n就是实参,只是把值传入进入了。
在exchange函数中m,n的值并没有改变,改变的只是a,b的值。exchange函数执行完成后,局部函数释放。对于m,n的值并没有造成实质的影响。所谓值传递,只是传递值进去。只是传递值而已,仅此而已。有时间再配图。

那么如果想改变m,n的值怎么做尼?下面代码示例一下c语言的实现方法,那就是传递指针,也叫地址传递、C语言相对麻烦一点,但是熟练后都一样。用c++的话直接饮用就可以了。

c代码实现交换函数:

#include <stdio.h>

void exchange(int *a,int *b)
{
	int t;
	printf("&a = %p,&b = %p\n",&a,&b );	

	t = *a;
	*a = *b;
	*b = t;

	printf("*a = %d,*b = %d\n",*a,*b );	

}

int main(int argc, char const *argv[])
{
	int m = 10;
	int n = 20;

	exchange(&m,&n);
	printf("&m = %p,&n = %p\n",&m,&n );
	printf("m = %d,n = %d\n",m,n );	

	return 0;
}

在这里插入图片描述
上述代码可以看出。交换函数中的形参是指针。然后操作的是指针指向的内容。吧指针的内容改变了。
在这里插入图片描述
也可以这么干,如果不容易理解。指针保存的就是变量的地址。取地址就是指针。等同的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值