C语言:传值与传址交换整数
目录
- 传值调用
- 传址调用
- 总结
传值调用 要想交换两个整数的值,我们可以自定义一个函数,来实现这个过程。具体代码如下:
#include void Swap1(int x, int y){ int z = 0; z = x; x = y; y = z; }int main(){ int a = 10; int b = 20; pirntf("交换前:a=%db=%d", a, b); Swap1(a, b); pirntf("交换前:a=%db=%d", a, b); return 0; }
按照一般的逻辑,大多数人应该都会这样写出这样的程序。但这个程序是否能达到目的呢》我们可以运行检验一下。
文章图片
很显然,a,b两个数的值并未发生改变。我们可以通过调试的方法来找出原因。
文章图片
通过这里我们可以知道,x,y的确接收了a,b的值,但是,a,b,x,y的地址都不相同,也就是说,这四个变量在内存中开辟了四块空间。那么,在Swap函数中,x,y的值的确互换了,但这仅仅是在0x0118fd90和0x0118fd94这两块空间里进行的交换,与a,b无关.
文章图片
所以,这段代码无法交换两个整数的值。x,y仅仅接收了a,b的值,这个过程也被称为传值调用。
传址调用 通过前面的分析,我们可以知道,要想交换a,b的值,需要在a,b所开辟的两块空间内进行操作。根据我们所学的知识,这时,我们就应该用到指针。因为指针变量可以存放地址。具体代码如下:
#include void Swap2(int* pa, int* pb){ int z = 0; z = *pa; *pa = *pb; *pb = z; }int main(){ int a = 10; int b = 20; printf("交换前:a=%db=%d\n", a, b); Swap2(&a, &b); printf("交换后:a=%db=%d\n", a, b); return 0; }
运行结果为:
文章图片
此时,这段代码就很好的解决了我们的问题。pa,pb用来接收a,b的地址,这个过程称为传址调用。
综上所述,Swap1在被调用的时候,实参传给形参,其实形参是实参的一份临时拷贝,改变形参,不能改变实参。Swap2在被调用的时候,函数和函数外边的变量建立起正真的联系,也就是函数内部可以直接操作函数外部的变量。这也就是传值调用和传址调用的区别。
总结 【C语言:传值与传址交换整数】本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗