【C语言基础】函数的传值和传址

一、传值调用

函数的形参和实参占有不同的内存块,对形参的修改不会影响实参。

形参是实参的一份拷贝,函数运行起来后,形参是形参,实参是实参,形参和实参没有任何关联性,改变形参时,不会对实参造成任何影响。

二、传址调用

形参是实参地址的一份拷贝,形参指向的实体是实参,对形参解引用后,拿到的内容就是实参,因此对形参解引用之后的内容进行修改,改变的就是实参。

三、实例 传址调用

//写一个函数实现两个数的交换
#include <stdio.h>
void Swap(int *x,int *y)
{
	int temp = 0;
	temp = *x;
	*x = *y;
	*y = temp;

}
int main()
{
	int a = 0;
	int b = 0;
	scanf_s("%d %d", &a, &b);
	Swap(&a, &b);
	printf("%d %d", a, b);
	return 0;
}

在这里插入图片描述
先输入a,b的值分别为7,8

在监视窗口中,我们可以看出&a=0x0113fc90,&b=0x0113fc84

x放的是a的地址,y放的是b的地址,即x=&a,y=&b;

*x,*y则是该地址所含的内容,所以*x=8,*y=7;

在这里插入图片描述
*x和*y两个内容交换后
最终实现两个数的交换

错误示例

void Swap(int x,int y)
{
	int temp = 0;
	temp = x;
	x = y;
	y = temp;

}
int main()
{
	int a = 0;
	int b = 0;
	scanf_s("%d %d", &a, &b);
	Swap(a, b);
	printf("%d %d", a, b);
	return 0;
}

在这里插入图片描述在这里插入图片描述

从上述两张图片对比可知,a和b,x和y指向的空间不同。即对应地址不同,所以对xy的值进行修改时,无法影响ab的值。

三、总结

对于一个函数是需要传值还是传址,一定要明确形参和实参之间的关系,形参的改变是否要影响实参非常重要。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值