博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
交换两个元素的值
阅读量:5287 次
发布时间:2019-06-14

本文共 1221 字,大约阅读时间需要 4 分钟。

交换两个元素的值,有传指针和传引用两种方式,这里需要注意的是引用一旦定义必须赋值,一旦赋值不能更改,对象a的引用就是a的别名(alias)。

(1)int &a;//a是int类型的引用

(2)int *a;//a是int类型的指针

(3)int *&a;//a是int*类型的引用,也就是a是指针的引用

可以用下面示意图解释

第一种交换方式,传递引用,swap1(int &x, int &y);第二种方式,传递指针swap2(int *x, int *y),第三种方式传递指针引用swap3(int*(&x), int*(&y))。分别如下所示

                

可以看到第一、二种方式交换的是数值,第三种方式交换的是指针。

附代码

1 #include 
2 3 4 void swap1(int &x, int &y) 5 { 6 int temp = x; 7 x = y; 8 y = temp; 9 }10 11 void swap2(int *x, int *y)12 {13 int temp;14 temp = *x;15 *x = *y;16 *y = temp;17 }18 19 void swap3(int*(&x), int*(&y))20 {21 int *temp;22 temp = x;23 x = y;24 y = temp;25 }26 27 int main()28 {29 int a = 1, b = 2;30 swap1(a, b);31 printf("传入引用,a = %d, b = %d\n", a, b);32 a = 1, b = 2;33 swap2(&a, &b);34 printf("传入指针,a = %d, b = %d\n", a, b);35 a = 1, b = 2;36 int *i = &a;37 int *j = &b;38 printf("传入指针引用前,a = %d, b = %d\n", a, b);39 printf("传入指针引用前,i = %d, i = %d\n", *i, *j);40 swap3(i, j);41 printf("传入指针引用后,a = %d, b = %d\n", a, b);42 printf("传入指针引用后,i = %d, i = %d\n", *i, *j);43 44 scanf("%d", &a);45 return 0;46 }

运行结果,与前图分析的完全相同

 

转载于:https://www.cnblogs.com/rain-lei/p/3577785.html

你可能感兴趣的文章
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
根据xml生成相应的对象类
查看>>
Android StageFrightMediaScanner源码解析
查看>>
八叉树
查看>>
Git 远程仓库
查看>>
javascript的发展及个人笔记
查看>>
全选,反全选,反选,获取选中的值,根据子选择控制全选按钮
查看>>
[CF#250 Div.2 D]The Child and Zoo(并查集)
查看>>
博客园博客插入公式
查看>>
hdu 1028 Ignatius and the Princess III(母函数入门+模板)
查看>>
Ubuntu下配置安装telnet server
查看>>
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>