C/C++基础(三)
解决问题:
了解C++变量?
了解C++引用的作用?
了解C++引用的本质?
1. C++变量
- 变量名实际上是一段连续的内存空间的别名。
- 程序通过变量来申请并命名内存空间。
- 通过变量的名字可以使用存储空间。
2. 引用是C++对C的重要补充。在C/C++中指针的作用基本一样,但是C++增加了另外一种给函数传递地址的途径,就是按引用传递。引用可以作为一个已定义变量的别名。
语法:
Type& ref = val;
案例1:
void test0(){ int a = 10; int& b = a; // 给变量a取个别名 b = 100; int& c = a; // 一个变量可以有n个别名 c = 200; } void test1(){ int a = 10; int b = 20; // int& ref; 引用必须初始化 int& ref = a; // 引用一但初始化就不能被改变 // ref = b; //不能改变引用 } void test2(){ // 建立数组引用的方法一 typedef int ArrRef[10]; int arr[10]; ArrRef& aRef = arr; for (int i = 0; i < 10; ++i){ aRef[i] = i + 1; } // 建立数组引用的方法二 int (&f)[10] = arr; for (int i = 0; i < 10; ++i){ f[i] = i + 10; } }
3. 函数参数和返回值。
最常看见引用的地方是函数参数和返回值。当引用被作为函数参数时,在函数内对任何引用的修改,将对还函数外的参数产生改变。当然也可以通过指针来完成同样的事情,使用引用语法上更加清晰。
如果函数返回一个引用,必须像从函数中返回一个指针一样对待。当函数返回值时,引用关联的内存一定要存在。
案例2:
void valueSwap(int n, int m){ int temp = n; n = m; m = temp; } // 交换失败 void pointSwap(int *n, int *m){ int temp = *m; *m = *n; *n = temp; } // 交换成功 void refSwap(int &m, int &n){ int temp = m; m = n; n = temp; } // 交换成功
上面的案例中,地址传递和引用传递都能达到相同的目的,所以C++更主张引用传递,因为语法上更清晰。
4. 引用的本质
引用的本质是一个指针常量。
Type& ref = val; // Type* const ref = val;
所以,引用所占空间大小和指针相同。