溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++引用的學(xué)習(xí)

發(fā)布時(shí)間:2020-07-10 02:32:34 來(lái)源:網(wǎng)絡(luò) 閱讀:730 作者:liam2199 欄目:移動(dòng)開(kāi)發(fā)

     C++引入了引用這個(gè)類型,引用實(shí)際是給變量起了一個(gè)別名,實(shí)際上,引用只是別名沒(méi)有獨(dú)立的內(nèi)存空間,和它所引用的變量共享內(nèi)存空間。

    變量的屬性有兩種:名稱和空間。

    而引用只有名稱沒(méi)有獨(dú)立的空間。

    對(duì)引用的改變就是對(duì)它所引用的變量的改變。

    格式:int a = 1; int& b = a;

    Δ定義引用時(shí)一定要初始化,指明該引用變量是誰(shuí)的別名。

    Δ引用一經(jīng)初始化不能重新指向其他變量。

    實(shí)際引用中,引用一般用作參數(shù)傳遞與返回值。

 

  1. # include <iostream> 
  2. using namespace std; 
  3.  
  4. int main(void
  5.     int val = 100; 
  6.     //定義引用 
  7.     int& refval = val; //引用必須初始化 
  8.     //int& refval; error  引用必須初始化 
  9.     cout<< "val =    " << val << endl; 
  10.     refval = 200;  //實(shí)際上改變的是val變量 
  11.     cout << "refval = " << refval  << endl;  //結(jié)果是200 
  12.      
  13.     int val2 = 500; 
  14.     refval = val2 ; //這只是簡(jiǎn)單的賦值,不代表refval引用至val2這個(gè)變量    
  15.  
  16.     cout << "val2 =   " << val2 << endl; //500 
  17.  
  18.     return 0; 

運(yùn)行結(jié)果:

 

C++引用的學(xué)習(xí)

    const引用,指向const對(duì)象的引用

    const int ival = 1024; const int& refval = ival;

    Δ普通變量引用const變量是非法的

    const int ival = 1024;  int& refval = ival ; //error 

    Δconst變量引用普通變量是合法的。

 

  1. # include<iostream> 
  2. using namespace std; 
  3.  
  4. int main(void
  5.     const int val = 1024; 
  6.     const int& refval = val; 
  7.     //  int& ref2 = val;  error,nonconst reference to a const object 
  8.     cout<<"refval = " << val << endl; 
  9.  
  10.     int val2 = 1024; 
  11.     const int& ref3 = val2;  //允許的 
  12.    //ref3 = 200; 錯(cuò)誤的,不能更改const常量 
  13.     cout << "ref3   = " << ref3 << endl; 
  14.  
  15.     double val3 = 3.4; 
  16.     //warning C4244: “初始化”: 從“double”轉(zhuǎn)換到“const int”,可能丟失數(shù)據(jù) 
  17.     const int& ref4 = val3; //等價(jià)于產(chǎn)生了一個(gè)臨時(shí)變量,int temp = val3; const int& ref4 = temp 
  18.     cout << "val3   = " << val3 << endl; 
  19.     cout << "ref4   = " << ref4 << endl; 
  20.      
  21. //  int& ref5 = val3;   非const不能引用double類型的變量 
  22.  
  23.     return 0; 

 

運(yùn)行結(jié)果:

 

C++引用的學(xué)習(xí)

 引用做函數(shù)參數(shù)傳遞:

 

  1. //按引用傳遞 
  2.  
  3. //swap(int &a, int &b); 
  4. //C語(yǔ)言里面: 
  5. // 值傳遞    形參不能更改實(shí)參 
  6. // 指針傳遞 
  7.  
  8. //地址傳遞方式通過(guò)形參的改變使相應(yīng)的實(shí)參改變 
  9. //引用傳遞也是可以的 
  10. //引用作為參數(shù)傳遞 
  11.  
  12. # include <iostream> 
  13. using namespace std; 
  14.  
  15. void swap(int &x, int &y); 
  16.  
  17. int main(void
  18.     int a = 5; 
  19.     int b = 6; 
  20.     cout<<"交換前" << "a = " << a <<" b = " << b << endl; 
  21.     swap(a,b);//在函數(shù)調(diào)用的時(shí)候,引用被初始化 , x = a ,y = b 
  22.     cout<<"交換后" << "a = " << a <<" b = " << b << endl; 
  23.  
  24.     return 0; 
  25. void swap(int &x, int &y) //形參是引用,調(diào)用的時(shí)候被初始化 
  26.     int temp = x; 
  27.     x = y; 
  28.     y = temp; 

運(yùn)行結(jié)果:

 

C++引用的學(xué)習(xí)

下面總結(jié)下引用于指針的區(qū)別:

 

引用訪問(wèn)一個(gè)變量是直接訪問(wèn),

指針是間接訪問(wèn)

 

引用只是別名,本身不分配內(nèi)存空間

指針本身就是一個(gè)變量,有自己的內(nèi)存空間

 

引用一經(jīng)初始化就不能再引用其他變量,

指針初始化后引用其他變量,除非const

 

 

值傳遞的時(shí)候,實(shí)參要初始化形參,就好分配一個(gè)形參變量,將實(shí)參內(nèi)容拷貝到形參

如果是類傳遞的話,還要調(diào)用拷貝函數(shù)

指針傳遞 實(shí)參初始化形參的時(shí)候也是要分配空間的,

引用傳遞 實(shí)參初始化形參時(shí)不分配空間,效率會(huì)高點(diǎn)

 

指針傳遞 本質(zhì)還是值傳遞,如果要修改指針的地址,單純用指針傳遞也不能的

僅僅修改指針指向的內(nèi)容,**,指針引用*&

 

引用作為函數(shù)返回值:

  1. //引用作為返回值,將函數(shù)放在賦值運(yùn)算符的左邊 
  2.  
  3. # include <iostream> 
  4. using namespace std; 
  5.  
  6. int a[] = {0,1,2,3,4}; 
  7.  
  8. int& index(int i) 
  9.     return a[i];  
  10.     //函數(shù)返回引用,引用在函數(shù)返回的時(shí)候初始化 
  11.     //index(3) 在函數(shù)返回的時(shí)候被初始化為a[3] 
  12.  
  13. int main(void
  14. {//引用作為函數(shù)返回值,使得函數(shù)可以放在運(yùn)算符的左邊 
  15.     index(3) = 100;  
  16.     cout << "a[3] = " << a[3] << endl;  //100 
  17.  
  18.     return 0; 

 運(yùn)行結(jié)果:

 

C++引用的學(xué)習(xí)

不能返回對(duì)局部變量的引用,或自動(dòng)化變量的引用:

  • //不能返回對(duì)局部變量的引用,或自動(dòng)化變量的引用 
  •  
  • # include <iostream> 
  • using namespace std; 
  •  
  • int& add(int a, int b) 
  •     int sum; 
  •     sum = a+b; 
  •      
  •     return sum; 
  • int main(void
  •     int n = add(3,4); 
  • //n2是引用沒(méi)有自己獨(dú)立的空間,依賴于所引用的變量 
  • //如果n2所引用的變量生命期已經(jīng)結(jié)束了, 
  • //n2也就是無(wú)用的引用,也就是不確定的 
  •     int& n2 = add(5,6);  
  •     //cout << "n2 =" << endl; 
  •     cout << "n = " << n  << endl; 
  •     cout << "n2 =" << n2 << endl;//輸出不確定的數(shù) 
  •      
  •     return 0; 

運(yùn)行結(jié)果:

 

C++引用的學(xué)習(xí)

 

 

向AI問(wèn)一下細(xì)節(jié)
推薦閱讀:
  1. C++ 引用
  2. C++右值引用

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI