C++核心程式設計 2 引用
阿新 • • 發佈:2021-08-06
引用的基本使用
作用:給變數起別名 ,語法:資料型別 &別名 =原名
注意:引用必須初始化,且初始化之後,就不可更改、
引用做函式引數
作用:函式傳參時,可以利用引用的技術讓形參修飾實參
優點:可以簡化指標修改實參
例項:
#include<iostream> using namespace std; //交換函式 //1、值傳遞 void Swap1(int a, int b) { int temp = a; a = b; b = temp; //cout << "Swap1 a=" << a << " " << "Swap1 b=" << b << endl;//值傳遞 } //2、地址傳遞 void Swap2(int * a, int * b) { int temp = *a; * a = * b; * b = temp; //cout << "Swap2 a=" << *a << " " << "Swap2 b=" << *b << endl; //地址傳遞 } //3、引用傳遞 void Swap3(int &a , int &b) { int temp = a; a = b; b = temp; cout<< "Swap3 a=" << a << " " << "Swap3 b=" << b << endl; //引用傳遞 } int main() { int a = 10; int b = 20; //Swap1(a, b); //值傳遞,形參不會修飾實參 //cout << "a=" << a << " " << "b=" << b << endl; //值傳遞列印:a=10,b=20 //Swap2(&a, &b);//地址傳遞,形參會修飾實參 //cout << "a=" << a << " " << "b=" << b << endl; //地址傳遞列印:a=20,b=10 Swap3(a, b); //引用傳遞,形參會修飾實參 cout << "a=" << a << " " << "b=" << b << endl; //引用傳遞列印:a=20,b=10
system("pause"); return 0; }
總結:通過引用引數產生的效果同地址傳遞是一樣的,引用的語法更清晰簡單
引用做函式返回值
作用:引用是可以作為函式的返回值存在的。用法:函式呼叫作為左值
注意:不要返回區域性變數引用
例項:
#include<iostream> using namespace std; //引用做函式的返回值 //1、不要返回區域性變數的引用 int& test1() { int a = 10; //區域性變數存放在四區中的 棧區 return a; } //2、函式的呼叫可以作為左值 int& test2() { static int a = 10; //加上關鍵字static ,區域性變數a就變成了靜態變數;靜態變數存放在全域性區,全域性區的資料在程式結束後由系統釋放 return a; } int main() { //int &ref = test1(); //cout << "ref=" << ref << endl; //第一次結果正確,是因為編譯器做了一次保留 //cout << "ref=" << ref << endl; //第二次結果錯誤,是因為 棧區 中存放的 區域性變數 a 的記憶體已經被釋放 int& ref = test2(); cout << "ref=" << ref << endl; //ref=10 cout << "ref=" << ref << endl; //ref=10 test2() = 1000; //如果函式的返回值是引用,函式的呼叫可以作為左值 cout << "ref=" << ref << endl; //ref=1000 cout << "ref=" << ref << endl; //ref=1000 system("pause"); return 0; }
引用的本質:
引用的本質在C++內部實現是一個指標常量
例項:
結論:C++推薦使用引用技術,因為語法方便,引用本質是指標常量,但是所有的指標操作編譯器都幫我們做了
常量引用:
作用:常量引用主要是用來修飾形參,防止誤操作
在函式形參列表中,可以加const修飾形參,防止形參改變實參
例項:
#include<iostream> using namespace std; //常量引用 //主要是用來修飾形參,防止誤操作 void ShowVal(const int &val) { //val = 1000; cout << "val=" << val << endl; } int main() { //int a = 10; //int& ref = 10; //引用必須引一塊合法的記憶體空間 const int & ref = 10; //加上const後 編譯器將程式碼修改 int temp = 10; int & ref = temp; //ref = 20; //加入const之後 變為只讀,不可修改 int a = 100; ShowVal(a); cout << "a=" << a << endl; system("pause"); return 0; }