【黑马程序员】c++引用

文章目录

  • 引用
    • 引用的基本使用
    • 引用做函数参数
    • 引用做函数的返回值
      • 不要返回局部变量的引用
      • 函数的调用可以作为左值
    • 引用的本质
    • 常量引用
      • 引用必须引用一块合法的内存空间

20240211

引用

引用的基本使用

  • 作用:给变量起别名

  • 语法:数据类型 &别名 = 原名

  • 注意:

    • 引用必须初始化,错误示例:int &b=a

    • 引用在初始化后,不可以改变

引用做函数参数

  • 作用:函数传参时,可以利用引用技术让形参修饰实参

  • 优点:可以简化指针修改实参

  • 代码示例:引用操作的实质是,参数引用形参是实参的别名,形参的操作就是在操作形参别名实参指向的变量

#include 

using namespace std;

void swap(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

int main() {
	int a = 1;
	int b = 2;
	swap(a, b);
	cout << "a: " << a << endl;
	cout << "b: " << b << endl;
	return 0;
}

引用做函数的返回值

不要返回局部变量的引用

#include 

int& getLocalVariable() {
    int x = 10;
    return x;
}

int main() {
    int& ref = getLocalVariable();
    std::cout << ref << std::endl;    //第一次结果正确是因为编译器做了保留
    std::cout << ref << std::endl;    // 第二次结果错误,因为内存已经释放
    return 0;
}

函数的调用可以作为左值

  • 本质是别名的重新赋值
#include 

using namespace std;

int & test() {
	static int a = 10;	// 使用静态局部变量,存放在全局区,全局区上的数据在程序结束后系统释放
	return a;
}

int main() {
	int &ref = test();
	cout << ref << endl;
	cout << ref << endl;
	test() = 100;
	cout << ref << endl;
	cout << ref << endl;
}

引用的本质

  • 本质:引用的本质在c++的内部实现是一个指针常量,地址的指向是固定的,只能修改其中的值,不能修改指针的指向
#include 

using namespace std;

// c++内部发现是引用,转化为int* const ref
void func(int& ref){
	// ref是引用,转化为*ref=100
	ref=100;
}

int main(){
	int a=10;
	//自动转换为int* const ref=&a;指针常量是指针的指向不能改变,这也说明为什么引用不可更改
	int& ref=a;
	// 内部发现ref是引用,自动帮我们转化为*ref=20;
	ref=20;
	cout << "a: "<< a << endl;
	cout << "ref: "<< ref << endl;
	func(a);
	return 0;
}

常量引用

  • 作用:常量引用主要用来修饰形参,防止误操作

  • 在函数形参列表中,可以加const修饰形参,防止形参改变实参

#include 

using namespace std;

void printVal(const int& a) {
	// a= 1000;
	cout << "a: " << a << endl;
}

int main(){
	int a = 10;
	printVal(a);
	cout << a<< endl;
	return 0;
}

引用必须引用一块合法的内存空间

  • 直接这么引用是错误的
// error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'
int& ref = 10;
  • 可以使用常量指针引用一个值
// 加上const之后,编译器将代码修改 int temp=10;const int& ref=temp; 
const int& ref = 10

你可能感兴趣的:(#,C++笔记,c++,算法,开发语言)