函数调用的类型

函数调用可以分为传值调用和传址调用

举个例子


#define _CRT_SECURE_NO_WARNINGS 1;
#include<stdio.h>
void Swap(int x, int y)
{
	int tmp = 0;
	tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前a=%d,b=%d",a,b);
	 Swap(a,b);//自定义一个函数,并调用
	printf("交换后a=%d,b=%d", a, b);
		return 0;
}
 

这里即为传值调用,但是a,b,的值不会被交换

原因如下:

1.这里的x,y为形式参数,在被调用前不会分配具体存储地址,只有在调用时形参才会拥有临时地址,调用完后会销毁。

2.这里的a,b为实参,实际我们输入的具体数值。在上面程序上,我们是对形参x,y进行了修改。

3.形参是实参的临时拷贝,对形参的修改不会影响到实参,及对x,y的修改不会影响我们a,b的值,所以a,b不会交换。

修改:

要实现对a,b进行交换,这里需要采用传址调用

说明

使用传址调用时,传给x,y的是我们a,b的地址,函数就可以通过寻址的方式去交换我们的a,b;具体如下

#define _CRT_SECURE_NO_WARNINGS 1;
#include<stdio.h>
void Swap(int *pa, int *pb)
{
	int tmp = 0;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前a=%d,b=%d",a,b);
	 Swap(&a,&b);//自定义一个函数,并调用
	printf("交换后a=%d,b=%d", a, b);
		return 0;
}

本篇文章到这里就结束了,制作不易,有收获的小伙伴也可以动动小手点点赞呐,你的点赞就是对我写出更多文章的动力!愿大家学习无忧,前程似锦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值