C++ 中引用與指針的區別實例詳解

這篇文章主要介紹了C++ 中引用與指針的區別實例詳解的相關資料,需要的朋友可以參考下

C++ 中引用與指針的區別實例詳解

引用是從C++才引入的,在C中不存在。爲了搞清楚引用的概念,得先搞明白變量的定義及引用與變量的區別,變量的要素一共有兩個:名稱與空間。

        引用不是變量,它僅僅是變量的別名,沒有自己獨立的空間,它只符合變量的“名稱”這個要素,而“空間”這個要素並不滿足。換句話說,引用需要與它所引用的變量共享同一個內存空間,對引用所做的改變實際上是對所引用的變量做出修改。並且引用在定義的時候就必須被初始化。

        參數傳遞的類型及相關要點:

        1 按值傳遞:形參不能修改實參的值,實參要初始化形參,需要分配空間,然後將實參內容copy至形參中。
        2 引用傳遞:實參初始化形參時不需要分配空間。
        3 指針傳遞:本質還是按值傳遞,在實參初始化形參時,還是需要分配空間的。如果需要修改指針的地址,單純用指針傳遞也是不行的,必須用**或*&

        下面討論引用的相關內容:

        1 引用的概念
        2 const引用
        3 引用作爲參數傳遞
        4 引用作爲函數返回值
        5 引用與指針的區別

        1 引用的概念

        牢記下面這幾個要點即可:

        (1)引用是變量的別名,沒有獨立的空間
        (2) 引用需要與它引用的變量共享共間
        (3) 對引用所做的改變實際上是對它所引用的變量做出改變
        (4) 引用在定義的時候需要進行初始化
        (5) 引用一經初始化不能重新引用其它變量。

        見如下範例:

int main(void) 
{ 
  int val = 100; 
  //int &refval;<span style="white-space:pre">    </span>//Error,引用必須初始化 
  int &refval = val; 
 
  cout << "val="<< val << endl; 
  refval = 200;  <span style="white-space:pre"> </span>//實際對val變量進行了改變 
  cout << "val=" << val << endl; 
 
  int val2 = 500; 
  refval = val2; <span style="white-space:pre"> </span>//這不代表對refval引用至val2這個變量, 
        //僅僅代表將val2賦值給refval,即val. 
  cout << "val=" << val << endl; 
 
  return 0; 
} 

        2 const引用

        const引用要點如下:

        (1) 顧名思義,const引用是指向const對象的引用.

        (2) const引用可以引用非const對象,但非const引用不能引用const對象。可以見下面的函數例子.

int a = 200; 
const int &ref = a; //OK 
 
const int b = 100; 
int &ref2 = b; //Error,  

        (3) const引用的對象值是常量,不能修改。

const int a = 200; 
const int &ref = a; 
ref = 100; //Error,引用的對象是常量,不能被修改 

        (4) const引用可以引用不同類型的變量,但是將產生一個臨時變量。如下:

double a = 3.14; 
const int &ref = a; //OK,它產生的過程是: 
               //int tmp = a; 生成臨時變量tmp,數據可能被截短。 
               //const int &ref = tmp;引用的實際上是臨時變量 

        3 引用作爲參數傳遞

        引用作爲參數傳遞是參數傳遞的其中一種。它在實參初始化形參時不需要分配內存空間,下面是例子:

void swap(int &a, int &b ) 
{ 
  int tmp = a; 
  a = b; 
  b = tmp; 
} 
 
int main() 
{ 
  int x = 20; 
  int y = 30; 
  swap( x, y ); 
  cout << x << endl; //x = 30; 
  cout << y << endl; //y = 20; 
} 

        4 引用作爲函數返回值

        先列出範例,如下:

int a[] = {1,2,3,4,5,6,7,8,9,0}; 
 
int &index(int i) 
{ 
  return a[i]; 
} 
 
int main() 
{ 
  index(3) = 100; 
  cout << a[3] << endl; //output: 100 
 
} 

        這是引用的另一個作用,可以將函數放在賦值運算符的左邊。index函數返回a[]的引用,對引用所做的改變將修改變量自身,所以a[3]被修改成100.     

        5 引用與指針的區別 

       (1)訪問引用是直接訪問,訪問指針是間接訪問。
        (2)引用是變量的別名,本身不單獨分配自己的內存空間,而指針擁有自己的內存空間
        (3) 引用一經初始化,不能再引用其它變量,而指針可以
        (4) 儘可以的使用引用,不得已時使用指針。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

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