簡單理解C++引用

飄過的小熊發表於2016-09-09

標籤(空格分隔): C系列


引用是變數的別名


先來兩段珍藏已久的程式碼:

第一段

#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
int main()
{
    int a,b;
    cin>>a>>b;
    if(a<b)
    swap(a,b);
    cout<<a<<' '<<b<<endl;
    return 0;
}

第二段

#include<iostream>
using namespace std;
void swap(int *&a,int *&b)
{
    int *temp;
    temp=a;
    a=b;
    b=temp;
}
int main()
{
    int a,b;
    cin>>a>>b;
    int *p=&a,*q=&b;
    if(a<b)
    swap(p,q);
    cout<<*p<<' '<<*q<<endl;
    return 0;
}

這兩段是剛開始接觸C++時自己摸索著寫的,但當時理解引用不知道什麼是引用,一個人還是費了很大的力氣,現在回過來看,簡直是,。,。通過第二段程式碼可以看出,指標和引用就是一個意思—地址。

常規使用

int a=29;
int &b=a;//(1)這句就是把a變數的地址給了b,b現在變成了a的遙控器,b指向的地址就是a的地址,&的意思就是說b就是一個引用。
int * b=& a;//(2)這句話是說b為一個指標,b同樣是指向a地址的變數,只不過是指標變數。
b=20;//(1)這裡的行為就是修改b指向的地址的變數的值。
*b=20;//(2)修改b指向的地址的變數的值。
cout<<a<<endl;//(1)輸出為20
cout<<a<<endl;//(2)輸出為20

昨天課堂上老師給出一個“奇奇怪怪的程式”

#include<iostream>
using namespace std;
int a=4;
int &fun(int x) {
    a=a+x;
    return a;
}
int main() {
    int t=5;
    cout<<fun(t)<<endl;
    fun(t)=20;//先呼叫再賦值,a=20
    cout<<fun(t)<<endl;//輸出25,a=25;
    t=fun(t);//先呼叫,再賦值, t=30
    cout<<fun(t)<<endl; //輸出60(a=60)
    return 0;
}

輸出結果:

9
25
60

反正我之前是沒有見過可以有呼叫函式的形式做左值的,看來還是要去上課才是真理.
回到宿舍來分析分析。

int &fun(int x) {
    a=a+x;
    return a;
}

先把這一團看作一個整體。就看做fun(t)做左值時就看做是一個引用變數,引用的是a的地址,不做左值時就是呼叫函式的語句。這樣解釋,,。,等於沒有解釋

相關文章