C++之引用

    xiaoxiao2021-03-25  63

    引用(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; }
    转载请注明原文地址: https://ju.6miu.com/read-35702.html

    最新回复(0)