c++的引用和指針

c++的引用和指針

簡略分析c++的引用和指針之間的聯繫和區別。


  • 1.引用

引用:就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。

引用的聲明方法:

類型標識符 &引用名=目標變量名;

例:char ch;
char &rp=ch;

1) 引用僅是變量的別名,而不是實實在在地定義了一個變量,因此引用本身並不佔用內存,而是和目標變量共同指向目標變量的內存地址.
2) 表達式中的取地址符&不再是取變量的地址,而是用來表示該變量是引用類型的變量。
3) 定義一個引用時,必須對其初始化。

  1. 引用的應用
    引用的一個重要作用就是作爲函數的參數。以前的C語言中函數參數傳遞是值傳遞,如果有大塊數據作爲參數傳遞的時候,採用的方案往往是指針,因爲這樣可以避免將整塊數據全部壓棧,可以提高程序的效率。但是現在(C++中)又增加了一種同樣有效率的選擇(在某些特殊情況下又是必須的選擇),就是引用。

(1)使用引用傳遞函數的參數,在內存中並沒有產生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數的參數,當發生函數調用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調用拷貝構造函數。因此,當參數傳遞的數據較大時,用引用比用一般變量傳遞參數的效率和所佔空間都好。

(2)使用指針作爲函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重複使用\”*指針變量名\”的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變量的地址作爲實參。而引用更容易使用,更清晰。

  如果既要利用引用提高程序的效率,又要保護傳遞給函數的數據不在函數中被改變,就應使用常引用。
2、常引用

  常引用聲明方式:const 類型標識符 &引用名 = 目標變量名;

  用這種方式聲明的引用,不能通過引用對目標變量的值進行修改,從而使引用的目標成爲const,達到了引用的安全性。
  如一下程序:

#include <stdio.h>
#include <iostream>
using namespace std;
void test_const();

int main(void){

   test_const();
   return 0;
}

void test_const(){
   int a=1;
   int &b=a;
   b=2;
   cout<<"a="<<a<<endl;//2
   int c=1;
   const int &d=c;
  //d=2;//編譯錯誤 error: assignment of read_only reference 'd'
    c=2;//正確
    cout<<"c="<<c<<endl;//
}

3、引用作爲返回值

  要以引用返回函數值,則函數定義時要按以下格式:

    類型標識符 &函數名 (形參列表及類型說明)

    { 函數體 }

  說明:

  (1)以引用返回函數值,定義函數時需要在函數名前加&

  (2)用引用返回一個函數值的最大好處是,在內存中不產生被返回值的副本。
  

引用總結

  (1)在引用的使用中,單純給某個變量取個別名是毫無意義的,引用的目的主要用於在函數參數傳遞中,解決大塊數據或對象的傳遞效率和空間不如意的問題。

  (2)用引用傳遞函數的參數,能保證參數傳遞中不產生副本,提高傳遞的效率,且通過const的使用,保證了引用傳遞的安全性。

  (3)引用指針的區別是,指針通過某個指針變量指向一個對象後,對它所指向的變量間接操作。程序中使用指針,程序的可讀性差;而引用本身就是目標變量的別名,對引用的操作就是對目標變量的操作

  (4)使用引用的時機。流操作符<<和>>、賦值操作符=的返回值、拷貝構造函數的參數、賦值操作符=的參數、其它情況都推薦使用引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章