《世紀灰燼紀元》史詩級成年龍兌換碼
阿新 • • 發佈:2021-12-18
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;
}