C++之引用
来源:互联网 发布:mac国家缩写 编辑:程序博客网 时间:2024/06/08 17:06
引用(reference)型变量:
让新申请的变量挂在原有同类型的变量的内存地址上。
1)引用型变量必须初始化(用对象初始化),挂在一个同类型现有变量上。
2)引用变量的地址和源来变量地址一致。
3)引用变量与源来变量一个数值变化另一个一定也随之改变。
4)引用变量做参数,经常是用来代替源来变量的赋值获取之(替身)
引用变量的原理实际上就是指针变量,被障眼法看成两个替身变量。
引用一般为了节约效率,但如果函数传递的是结构体或类,择效率比较低。
判断指针和引用,应从右向左读。char ** a 则a是一个指针,指向
另一个指针,而另一个指针指向的是const char类型。const char *& b 则
b是一个指针引用,而指针指向一个const char。
#include <iostream>using namespace std;void Swap1(int a, int b);void Swap2(int& a, int& b);void Swap3(int *a, int *b);void Swap4(const char* a, const char* b);void Swap5(const char** a, const char** b);void Swap6(const char*& a, const char*& b);int main(){ int i = 23, j = 32; int &ri = i; //别名 int &rj = j; //别名 //int &m; //错误,引用变量必须初始化 cout<< "i = " << i << " i的地址:" << &i <<endl; cout<< "j = " << j << " j的地址:" << &j <<endl; cout<< "ri = " << ri << " ri的地址:" << &ri <<endl; cout<< "rj = " << rj << " rj的地址:" << &rj <<endl; cout<< "****************************************" <<endl; Swap2(i, j); cout<< "i = " << i << " i的地址:" << &i <<endl; cout<< "j = " << j << " j的地址:" << &j <<endl; cout<< "ri = " << ri << " ri的地址:" << &ri <<endl; cout<< "rj = " << rj << " rj的地址:" << &rj <<endl; cout<< "****************************************" <<endl; int a = 10; int b = 20; Swap1(a, b); cout<< "a = " << a << " b = " << b <<endl; Swap3(&a, &b); cout<< "a = " << a << " b = " << b <<endl; const char* ch1 = "abcd"; const char* ch2 = "efgh"; Swap4(ch1, ch2); cout<< "ch1 = " << ch1 << " ch2 = " << ch2 <<endl; Swap5(&ch1, &ch2); cout<< "ch1 = " << ch1 << " ch2 = " << ch2 <<endl; Swap6(ch1, ch2); cout<< "ch1 = " << ch1 << " ch2 = " << ch2 <<endl; return 0;}//值传递,形参交换,实参没有交换void Swap1(int a, int b){ int c = a; a = b; b = c;}//引用交换,形参引用就是实参的别名,引用的本质是指针,实际为实参进行交换void Swap2(int& a, int& b){ int c = a; a = b; b = c;}//形参指向的是实参的地址,直接对地址内容进行交换void Swap3(int *a, int *b){ int c = *a; *a = *b;; *b = c;}//因实参本身就是指针,所以仍是按值传递void Swap4(const char* a, const char* b){ const char* c = a; a = b; b = c;}//传递实参的地址,完成按值交换void Swap5(const char** a, const char** b){ const char* c = *a; *a = *b; *b = c;}//使用指针的引用,实际交换的就是实参void Swap6(const char*& a, const char*& b){ const char*c = a; a = b; b = c;}
0 0
- C++Primer读书笔记之引用
- c之引用作为参数
- C语言之指针,数组,引用
- C常见问题之头文件引用
- objective-c基础之引用计数
- 《唐老师C++》之const引用
- c,c++易错点之指针与引用
- 黑马程序员-Object C之循环引用
- C语言之指针,数组,引用
- Objective-C内存管理之引用计数
- 【C++】:C++之C++的引用
- C与C++之引用与指针
- 引用(c++)
- C++----引用
- c++-引用
- C ++ 引用
- 【c++】引用
- 【c++】引用
- pta basin 1001
- MyBatis学习一 mybatis的原理,操作流程
- F函数的极大极大算法
- 24. Swap Nodes in Pairs
- Blank space issue in tns names ora
- C++之引用
- 来说说深圳搬家公司网站的优化策略
- 谱聚类(spectral clustering) python可视化实现
- hadoop基础框架介绍
- 子沐教你Scrapy——浅谈Python爬虫
- hdu 2717 (一维广搜)
- 计算机图形学03一一OpenGL 线的形成解析 和 DDA算法
- java 写文件的三种方法比较
- 严重: IOException while loading persisted sessions: java.io.EOFException解决方案