要实现该功能,非常简单,但是这篇博客的目的是谈谈引用,练习引用。
引用是C++中的概念。引用既不是被引用物(referent)的拷贝,也不是指向被引用物(referent)的指针,引用其实就是它自己。引用的一些规则如下:
- 引用被创建的同时必须初始化(指针可以在任时候被初始化)。
- 不能有NULL引用,引用必须与合法的存储单元相关联(指针则可以是NULL)。
- 一旦引用被初始化,就不能改变引用的关系(指针可以随时改变所指的对象)。
在C++中,函数的参数和返回值的传递方式有三种:值传递、指针传递、引用传递。
实际上,引用传递能做到的任何事,指针也都能做到。为什么还需要引用?指针能够毫无约束地操作内存中的任何东西,功能强大,非常危险。引用的存在就是“用恰当的工具做恰如其分的工作”。
#include<stdio.h> int main() { void my_swap(int &x, int &y); int n1, n2, n3; printf("input three integer n1,n2,n3:"); scanf_s("%d,%d,%d", &n1, &n2, &n3); if (n1 > n2) { my_swap(n1, n2); } if (n1 > n3) { my_swap(n1, n3); } if (n2 > n3) { my_swap(n2, n3); } printf("Now,the ascending order is:%d,%d,%d\n", n1, n2, n3); return 0; } void my_swap(int &x, int &y) { if (x > y) { int temp = x; temp = x; x = y; y = temp; } }
关于void my_swap(int &x, int &y);的实现,可以不用第三个临时变量,具体实现有一下两种办法:
- 异或运算
void my_swap(int &x, int &y) { if (x > y) { x = x ^ y; y = x ^ y; x = x ^ y; } }
- 数学公式
void my_swap(int &x, int &y) { if (x > y) { x = x + y; y = x - y; x = x - y; } }
本程序在VS2017下运行通过。