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
原创粉丝点击