关于函数实现数值交换
来源:互联网 发布:java中九九乘法表算法 编辑:程序博客网 时间:2024/06/05 20:11
#include <stdio.h> void swap0(int a ,int b){ printf(" a addr : %d , b addr: %d\n", &a , &b); int temp = a; a = b; b = temp;}int main() { int x=3 , y=5; printf(" x addr : %d , y addr: %d\n", &x , &y); printf(" x : %d , y : %d\n", x , y); swap0( x, y); printf(" x : %d , y : %d\n", x , y);return 0;}
运行结果:
x addr : 1703740 , y addr: 1703736
x : 3 , y : 5
a addr : 1703652 , b addr: 1703656
x : 3 , y : 5
Press any key to continue
表明:采用值调用方式无法交换实参的值,调用交换swap0导致实际参数x和y的值分别复制到形式参数a和b中,系统为形参a、b分配新的内存地址,故改变形参的值对实参无影响。在交换体内,a和b的值互换,函数终止。 终止后,a和b的新值不会被复制回实际参数。 因此,实际参数的值不受功能的影响。
#include <stdio.h> void swap1(int *a , int *b)//使用指针方式修改指向内存块的值, 传值方式{ printf(" a addr : %d , b addr: %d\n", &a , &b); printf(" a memory block addr : %p , b memory block addr: %p\n", a , b); int temp = *a; *a = *b; *b = temp; printf(" a addr : %d , b addr: %d\n", &a , &b); printf(" a memory block addr : %p , b memory block addr: %p\n", a , b);}int main() { int x=3 , y=5; printf(" x addr : %d , y addr: %d\n", &x , &y); printf(" x memory block addr : %p , y memory block addr: %p\n", &x,&y); printf(" x : %d , y : %d\n", x , y); swap1( &x, &y); printf(" x : %d , y : %d\n", x , y); return 0;
}运行结果:
x addr : 1703740 , y addr: 1703736
x memory block addr : 0019FF3C , y memory block addr: 0019FF38
x : 3 , y : 5
a addr : 1703652 , b addr: 1703656
a memory block addr : 0019FF3C , b memory block addr: 0019FF38
a addr : 1703652 , b addr: 1703656
a memory block addr : 0019FF3C , b memory block addr: 0019FF38
x : 5 , y : 3
Press any key to continue
可以发现:采用指针方式修改指向内存块的值时,也会为形参分配新的地址,但是形参指向的内存块的地址与实参相同,故对形参指向的内存块的值进行修改,实参指向的内存块的值即发生相同的改变,故可以完成值的交换。
#include <stdio.h> void swap2(int &a , int &b)//使用引用方式,串引用方式{ printf(" a addr : %d , b addr: %d\n", &a , &b); int temp = a; a = b; b = temp;}int main() { int x=3 , y=5; printf(" x : %d , y : %d\n", x , y); printf(" x addr : %d , y addr: %d\n", &x , &y); swap2(x , y); printf(" x : %d , y : %d\n", x , y); return 0;}
x : 3 , y : 5
x addr : 1703740 , y addr: 1703736
a addr : 1703740 , b addr: 1703736
x : 5 , y : 3
Press any key to continue
可以发现:利用引用参数可以成功完成数值交换,调用swap2(x,y);则int &a=x;int &b=y; 那么a相当于x的别名,b相当于y的别名,交换a和b的值即相当于交换x和y的值。
注:引用是一种特殊类型的变量,我们可以认为它是另一个变量的别名,利用引用名和原来的变量名访问变量的效果是一样的。引用的形式是:类型标识符 &引用名。比如:
int i, j;
int &ri=i; // 建立一个int型的引用ri,并将其初始化为变量i的一个别名
j=10;
ri=j; // 相当于 i=j;
- 关于函数实现数值交换
- 数值交换模板函数
- 关于交换a,b两数值
- 关于数值交换的几种方法
- 用指针实现两数值交换
- 实现两数值型变量交换数值的方法
- 数值交换
- 交换数值
- 交换数值
- 数值交换
- 交换函数的实现
- 关于调用swap进行数值交换的整理
- 关于交换函数的总结
- 一个使用数学技巧实现的数值交换
- 一个使用数学技巧实现的数值交换
- Java笔记:利用位运算实现数值交换
- 函数实现两个数交换
- 数值交换算法
- ORACLE查询
- 初遇乔伊
- 中小创势如破竹未来投资机会在哪
- 安卓 BottomNavigationBar 底部导航栏 最简单用法详解
- 用contains判断包含中文字符
- 关于函数实现数值交换
- Day7-24.Auto increment and decrement
- 在js中怎样获得checkbox里选中的多个值
- discuzX3.2部分DIY模块无法实现伪静态的解决方法
- 怎样才能保证服务器数据的安全?
- 使用数组简单实现的阻塞队列
- 借助WindowBuilder插件轻松完成JAVA图形用户界面编辑
- consul集群安装以及服务的注册和发现
- eclipse项目文件出错