传值调用和传址调用的区别(附例子)

传值调用和传址调用的区别(附例子)

来源:信奥一本通-函数

【传值调用】

传值调用将实参的数据(而不是地址)传给了形参,
在被调用的函数中,形参值改变了,但是不影响主调函数的实参值
参数传递方向是由实参向形参单向传递

如下交换a和b值的函数:

调用函数后,因为是传值调用,故仅改变了形参(a和b)的值,
却并未改变实参(c和d)的值,故输出仍为1和2。

#include<stdio.h>
void swap(int a,int b)//a与b交换值的函数,括号内为传值调用 
{
	int tmp=a;
	a=b;
	b=tmp;
}
int main()
{
	int c=1,d=2;
	swap(c,d);
	printf("%d %d",c,d);
	return 0;
 } 

【传址调用】

传址调用传值调用不同,
传址调用是将实参变量的地址传给形参,
(此时形参是指针,即让形参的指针指向实参地址)
改变形参的同时也把实参改变了。

同样也是交换a和b值的函数:

调用函数后,使用的是传值调用,在改变形参(a和b)的值同时,
指针指向实参(c和d)的值,实参也改变了,故输出为2和1。

#include<stdio.h>
void swap(int &a,int &b)//a与b交换值的函数,括号内为传址调用
{
	int tmp=a;
	a=b;
	b=tmp;
}
int main()
{
	int c=1,d=2;
	swap(c,d);
	printf("%d %d",c,d);
	return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值