指標和引用

2021-06-27 03:14:44 字數 2023 閱讀 8133

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

引用的宣告方法:型別識別符號 &引用名=目標變數名;與定義指標相似,只是用&代替了*。引用(reference)是c++對c語言的重要擴充。

discussion:

1.&在宣告中不是取位址運算,而是起標識作用

2.型別識別符號是指目標變數的型別

3.宣告引用時,必須同時對其進行初始化。

4.引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變數名的別名(從一而終)。

5.對引用求位址,就是對目標變數求位址

引用作為引數:1.相當可變引數;2.給函式傳遞大型物件

voidswapint(int&a,int&b)

呼叫該函式的c++方法為:swapint(x,y); c++自動把x,y的位址作為引數傳遞給swapint函式。

當大型物件被傳遞給函式時,使用引用引數可使引數傳遞效率得到提高,因為引用並不產生物件的副本,也就是引數傳遞時,物件無須複製。

常引用:宣告方式:const 型別識別符號&引用名=目標變數名

int a ;

const int &ra=a;

ra=1; //錯誤

a=1; //正確

------相同點:

1. 都是位址的概念;指標指向一塊記憶體,它的內容是所指記憶體的位址;引用是某塊記憶體的別名;可在一定程式上理解為變數的const指標(不是const 變數指標)

------區別

1. 指標是乙個實體,而引用僅是個別名;

2. 引用使用時無需解引用(*),指標需要解引用;

3. 引用只能在定義時被初始化一次,之後不可變;指標可變;(引用「從一而終」)

4. 引用沒有 const,指標有 const,const 的指標不可變;

5. 引用不能為空,指標可以為空;

6. 「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身(所指向的變數或物件的位址)的大小;

7.從記憶體上來講 系統為指標分寸記憶體空間,而引用與繫結的物件共享記憶體空間,系統不為引用變數分配內容空間。但是當引用作為成員時,其占用空間與指標相同(沒找到標準的規定)。

8. 指標和引用的自增(++)運算意義不一樣;

指標作引數常見問題:

1.指標做引數時對指標值的修改:(區別指標的值和 指標所指變數的值)

//交換兩整數

void change(int *data1, int *data2)

指標做引數和正常變數名做引數一樣,改變它的值,對外部沒有影響。要想產生影響,只能通過dereference 指標,即*pointer來操作。

2.用區域性變數的位址作返回值

#include int *setdata(void) 

int main(void)

return 0;

}

上面的錯誤是將消亡的位址返回,修正的方法可以考慮2種,一是將函式中的陣列改為靜態的。另一種辦法是再動態申請記憶體。這樣修改之後固然正確,但如果主程式中的rst改為陣列,結果又怎樣呢?這將導致編譯錯誤。因為陣列的位址不能被修改。跟objc中(nserror * __autoreleasing *)error不同,因為*error 是autoreleasing的

3.雙重指標作引數

在函式內部想改變指標的值,就用雙重指標做引數。

指標和引用,const 指標和const 引用

指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...

指標和引用

一 先看一段 include using namespace std void freeptr1 int p1 void freeptr2 int p2 void main 思考 在 freeptr1 和freeptr2 的比較中,你能發現它們的不同點嗎?二 對 進行解釋 include using...

指標和引用

指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...