C++指針和引用及區別


1.變量

首先最重要的,variable的定義,當你申明一個變量的時候,計算機會將指定的一塊內存空間和變量名進行綁定;這個定義很簡單,但其實很抽象,例如:int x = 5; 這是一句最簡單的變量賦值語句了, 將5賦值於名字叫做x的內存空間,其本質是將值5賦值到一塊內存空間,而這個內存空間名叫做x。

圖1 變量

變量在內存中的操作其實是需要經過2個步驟的:

  1. 找出與變量名相對應的內存地址。
  2. 根據找到的地址,取出該地址對應的內存空間里面的值進行操作。

2.指針

指針的特殊之處在於:指針變量相對應的內存空間存儲的值恰好是某個內存地址。這也是指針變量區別去其他變量的特征之一。例如某個指針的定義如下:

int x = 5;
int *ptr = &x;

ptr即是一個指正變量名。通過指針獲取這個指針指向的內存中的值稱為解引用。空指針是不能解引用的。

指針內存空間的表示如下:

圖2 指針

3.引用

引用(reference)在C++中也是經常被用到,尤其是在作為函數參數的時候,需要在函數內部修改更新函數外部的值的時候。首先我們必須明確的一點就是:引用是一種特殊的指針。

引用是一個指向其它對象的常量指針,它保存着所指對象的存儲地址。並且使用的時候會自動解引用,而不需要像使用指針一樣顯式提領。

例如引用的定義如下:

int x = 5;
int &y = x;

4.指針和引用的區別總結

  1. 指針有自己的一塊空間,而引用只是一個別名;
  2. 使用sizeof看一個指針的大小是4,而引用則是被引用對象的大小;
  3. 指針可以被初始化為NULL,而引用必須被初始化且必須是一個已有對象的引用;
  4. 作為參數傳遞時,指針需要被解引用才可以對對象進行操作,而直接對引用的修改都會改變引用所指向的對象;
  5. 指針在使用中可以指向其它對象,但是引用只能是一個對象的引用,不能 被改變;
  6. 指針可以有多級指針(**p),而引用至於一級;
  7. 指針和引用使用++運算符的意義不一樣;
  8. 如果返回動態內存分配的對象或者內存,必須使用指針,引用可能引起內存泄露。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM