C++黑马程序员——P89-94. C++中的引用
作者:互联网
- P89. C++中的引用——引用的基本语法
- P90. C++中的引用——引用的注意事项
- P91. ...——引用做函数参数
- P92. ...——引用做函数返回值
- P93. ...——引用的本质
- P94. ...——常量引用
- (P89)引用的基本使用
作用:给变量起别名
语法:数据类型 &别名 = 原名
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a = 10; 7 int &b = a; 8 cout << "a = " << a << endl; 9 cout << "b = " << b << endl; 10 b = 20; 11 cout << "a = " << a << endl; 12 cout << "b = " << b << endl; 13 14 system("pause"); 15 return 0; 16 }
运行结果
- (P90)
引用必须初始化 //不能 int &b;
引用在初始化后,不可以改变
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a = 10; 7 int &b = a; 8 int c = 20; 9 cout << "a = " << a << endl; 10 cout << "b = " << b << endl; 11 cout << "c = " << c << endl; 12 b = c; //赋值操作(把20赋值给b),而不是更改引用,b仍然是a的引用 13 cout << "a = " << a << endl; 14 cout << "b = " << b << endl; 15 cout << "c = " << c << endl; 16 17 system("pause"); 18 return 0; 19 }
运行结果
- (P91)
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
1 #include <iostream> 2 using namespace std; 3 4 //值传递 5 void swap01(int a, int b) 6 { 7 int temp = a; 8 a = b; 9 b = temp; 10 cout << "swap01 a = " << a << endl; 11 cout << "swap01 b = " << b << endl; 12 } 13 14 //地址传递 15 void swap02(int* a, int* b) 16 { 17 int temp = *a; 18 *a = *b; 19 *b = temp; 20 } 21 22 //引用传递 23 void swap03(int &a, int &b) 24 { 25 int temp = a; 26 a = b; 27 b = temp; 28 } 29 30 int main() 31 { 32 int a1 = 10; 33 int b1 = 20; 34 int a2 = 10; 35 int b2 = 20; 36 int a3 = 10; 37 int b3 = 20; 38 swap01(a1, b1); //值传递,形参不会修饰实参 39 cout << "a1 = " << a1 << endl; 40 cout << "b1 = " << b1 << endl; 41 swap02(&a2, &b2); //地址传递,形参会修饰实参 42 cout << "a2 = " << a2 << endl; 43 cout << "b2 = " << b2 << endl; 44 swap03(a3, b3); //引用传递,形参会修饰实参 45 cout << "a3 = " << a3 << endl; 46 cout << "b3 = " << b3 << endl; 47 48 system("pause"); 49 return 0; 50 }
运行结果
总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单
- (P92)
注意:不要返回局部变量引用
用法:函数调用作为左值
1 #include <iostream> 2 using namespace std; 3 4 //返回局部变量引用(不要返回局部变量的引用) 5 int& test01() 6 { 7 int a = 10; //局部变量存放在栈区 8 return a; 9 } 10 11 //返回静态变量引用 12 int& test02() 13 { 14 static int a = 10; //静态变量存放在全局区,程序结束后系统释放 15 return a; 16 } 17 int main() 18 { 19 int& ref1 = test01(); 20 cout << "ref1 = " << ref1 << endl; //第一次的打印结果是正确的,是因为编译器做了保留 21 cout << "ref1 = " << ref1 << endl; //第二次结果错误,因为a的内存已经释放 22 23 int& ref2 = test02(); 24 cout << "ref2 = " << ref2 << endl; 25 cout << "ref2 = " << ref2 << endl; 26 //如果函数的返回值是引用,则函数的调用可以作为左值 27 test02() = 1000; 28 cout << "ref2 = " << ref2 << endl; 29 cout << "ref2 = " << ref2 << endl; 30 31 system("pause"); 32 return 0; 33 }
运行结果
- (P93)引用的本质
本质:引用的本质在C++内部实现是一个指针常量
(P60. 常量指针 const int* p = &a; 指针的指向可以修改,但是指针指向的值不可以改(p可以改,*p不可以改)
指针常量 int* const p = &a; 指针的指向不可以改,指针指向的值可以改(*p可以改,p不可以改)
既修饰指针又修饰常量 const int* const p=&a; 指针指向和指针指向的值都不可以改(*p和p都不可以改))
- (P94)常量引用
作用:常量引用主要用来修饰形参,防止误操作
1 //int& ref = 10; //错误,引用必须引一块合法的内存空间(栈区或堆区) 2 const int& ref = 10; //正确,加上const之后,编译器将相当于代码修改为 int temp = 10; const int& ref = temp; 3 //ref = 20; //错误,加入const之后变为只读,不可以修改
在函数形参列表中,可以加const修饰形参,防止形参改变实参
1 #include <iostream> 2 using namespace std; 3 4 //常量引用修饰形参,防止误操作 5 void showvalue(const int& ref) 6 { 7 //ref = 1000; 错误,不可更改值 8 cout << "ref = " << ref << endl; 9 } 10 11 int main() 12 { 13 int a = 10; 14 showvalue(a); 15 cout << "a = " << a << endl; 16 17 system("pause"); 18 return 0; 19 }
标签:10,P89,const,常量,int,C++,引用,94,指针 来源: https://www.cnblogs.com/wjjgame/p/16381693.html