本篇介绍的变量引用与之前介绍的指针不是同一概念,它们有本质的区分:
1)不存在空引用。引用必须连接到一块合法的内存。
2)一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3)引用必须在创建时被初始化。指针可以在任何时间被初始化。
下面代码介绍其应用场景,供参考
/* * Author:W; * 变量引用:是已定义声明的变量的“别名” * 引用与指针的区别: * 1)不存在空引用。引用必须连接到一块合法的内存。 * 2)一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。 * 3)引用必须在创建时被初始化。指针可以在任何时间被初始化。 */ //引入头文件:头文件包含了程序中必需的或有用的信息【单行注释】 #include <iostream> //命名空间使用 using namespace std; //交换函数声明 void swap(int& a, int& b); //设置数组特定位置的值 int& setArrValue(int* array, int index); //main程序执行入口函数 int main() { //声明变量 int a = 3; //声明引用变量 int& b = a; cout << "=====引用变量=====" << endl; cout << "a=" << a << endl; cout << "b=" << b << endl; cout << "=====引用变量作为函数参数=====" << endl; int c = 4; int d = 10; cout << "交换之前 :c = " << c << " d = " << d << endl; swap(c, d); cout << "交换之后 :c = " << c << " d = " << d << endl; cout << "=====函数返回引用=====" << endl; //【返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。】 int arr[3] = { 1,4,7 }; cout << "改变前的值" << endl; for (int i = 0; i < 3; i++) { cout << "arr[" << i << "] = " << arr[i] << endl; } setArrValue(arr,1) = 5; cout << "改变后的值" << endl; for (int i = 0; i < 3; i++) { cout << "arr[" << i << "] = " << arr[i] << endl; } } //改变数组特定位置的值 int& setArrValue(int* array,int index) { int& ref = array[index]; return ref; } /// <summary> /// 交换函数声明 /// </summary> /// <param name="a"></param> /// <param name="b"></param> void swap(int& a, int& b) { int temp; temp = a; /* 保存地址 a 的值 */ a = b; /* 把 b 赋值给 a */ b = temp; /* 把 a 赋值给 b */ }
运行结果如下: