1. 程式人生 > 其它 >C++核心程式設計 2 引用

C++核心程式設計 2 引用

引用的基本使用

作用:給變數起別名 ,語法:資料型別 &別名 =原名

注意:引用必須初始化,且初始化之後,就不可更改、

引用做函式引數

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

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

例項:

#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;
}