1. 程式人生 > 資訊 >建設銀行宣佈“龍支付”App 將從各大應用商店下線:後續會逐步關停各項服務

建設銀行宣佈“龍支付”App 將從各大應用商店下線:後續會逐步關停各項服務

2 引用

2.1 引用的基本使用

作用:給變數起別名

語法: 資料型別 &別名 = 原名

示例:

#include <iostream>
using namespace std;


int main()
{

	// 引用基本語法
	// 資料型別 &別名 = 原名

	int a = 10;
	// 建立引用
	int& b = a;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	b = 100;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	system("pause");

	return 0;
}

2.2 引用注意事項

  • 引用必須初始化
  • 引用在初始化後,不可以改變

示例:

#include <iostream>
using namespace std;

int main()
{

	int a = 10;
	

	// 1、引用必須初始化
	// int& b; // 錯誤,必須初始化
	int &b = a;

	// 2、引用在初始化後,不可以修改
	int c = 20;

	b = c; // 賦值操作,而不是更改引用 

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;

	system("pause");

	return 0;
}

2.3 引用做函式引數

作用:函式傳參時,可以利用引用的技術讓形參修飾實參

優點:可以簡化指標修改實參

示例:

#include <iostream>
using namespace std;

// 交換函式

// 1、值傳遞
void mySwap01(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;

	//cout << "swap01 a = " << a << endl;
	//cout << "swap01 b = " << b << endl;
}

// 2、地址傳遞
void mySwap02(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;

	//cout << "swap02 a = " << *a << endl;
	//cout << "swap02 b = " << *b << endl;
}

// 3、引用傳遞
void mySwap03(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}

int main()
{
	
	int a = 10;
	int b = 20;

	// mySwap01(a, b); // 值傳遞,形參不會修飾實參
	// mySwap02(&a, &b); // 地址傳遞,形參會修飾實參

	mySwap03(a, b); // 引用傳遞,形參會修飾實參


	cout << "a = " << a << endl;
	cout << "b = " << b << endl;


	system("pause");

	return 0;
}

總結:通過引用引數產生的效果同按地址傳遞是一樣的。引用的語法更清楚簡單

2.4 引用做函式返回值

作用:引用是可以作為函式的返回值存在的

注意:不要返回區域性變數引用

用法:函式呼叫作為左值

示例:

#include <iostream>
using namespace std;


// 引用做函式的返回值

// 1、不要返回區域性變數的引用
int & test01()
{
	int a = 10; // 區域性變數存放在四區中的 棧區
	
	return a;

}

// 2、函式的呼叫可以作為左值
int& test02()
{
	static int a = 10; // 靜態變數,存放在全域性區,全域性區上的資料在程式結束後系統釋放掉
	return a;
}

int main()
{
	//int & ref = test01();

	//cout << " ref = " << ref << endl; // (X86)第一次結果正確,是因為編譯器做了保留
	//cout << " ref = " << ref << endl; // (X86)第二次結果錯誤,因為 a 的記憶體已經釋放

	int& ref2 = test02();

	cout << "ref2 = " << ref2 << endl;
	cout << "ref2 = " << ref2 << endl;

	test02() = 1000; // 如果函式的返回值是引用,這個函式呼叫可以做為左值 

	cout << "ref2 = " << ref2 << endl;
	cout << "ref2 = " << ref2 << endl;

	system("pause");

	return 0;
}

2.5 引用的本質

本質:引用的本質在c++內部實現是一個指標常量.

講解示例:

//發現是引用,轉換為 int* const ref = &a;
void func(int& ref){
	ref = 100; // ref是引用,轉換為*ref = 100
}
int main(){
	int a = 10;
    
    //自動轉換為 int* const ref = &a; 指標常量是指標指向不可改,也說明為什麼引用不可更改
	int& ref = a; 
	ref = 20; //內部發現ref是引用,自動幫我們轉換為: *ref = 20;
    
	cout << "a:" << a << endl;
	cout << "ref:" << ref << endl;
    
	func(a);
	return 0;
}

結論:C++推薦用引用技術,因為語法方便,引用本質是指標常量,但是所有的指標操作編譯器都幫我們做了

2.6 常量引用

作用:常量引用主要用來修飾形參,防止誤操作

在函式形參列表中,可以加const修飾形參,防止形參改變實參

示例:

#include <iostream>
using namespace std;

// 列印資料函式
void showValue(const int& val)
{
	// val = 1000;
	cout << "val = " << val << endl;
}

int main()
{

	// 常量引用
	// 使用場景:用來修飾形參,防止誤操作

	// int a = 10;

	// 加上 const 之後,編譯器將程式碼修改  int temp = 10; const int& ref = temp
	// const int& ref = 10; // 引用必須引一塊合法的記憶體空間
	// ref = 20; // 加入 const 之後變為只讀,不可以修改

	int a = 100;
	showValue(a);

	cout << "a = " << a << endl;

	system("pause");

	return 0;
}