指標與引用

2021-09-07 13:15:52 字數 2447 閱讀 7879

一、指標

指標指向一塊記憶體,它的內容是所指記憶體的位址。所以說。指標就是位址。

1、指標的宣告及初始化

看下樣例

int ival = 1024;int *pi = 0;    正確。0表示空位址

int *pi0 = 5; 錯誤。5是詳細數字,不能表示位址

int *pil; 正確,宣告,並沒有初始化

*pil = 5; 正確,pil位址裡的數字是5,*pil指向5,同理*pil = ival是正確的

pil= &ival; 正確。pil就是位址,所以把5的位址賦值給pil是正確的

int *pil = &val; 正確pi = pil; 正確,就是位址之間的賦值

pil = 0; 正確,空位址

*p++     表示先完畢取值操作。再對位址執行++操作。是位址的++。*運算子優先順序高於++。

(*p)++   表示*p所指向值的自加運算。是值的++

2、void *指標

不論什麼型別的指標都能夠直接賦值給它,無需進行強制型別轉換。

比如:

void *p1;

int *p2;

p1 = p2;

3、指向指標的指標

簡單的說就是,a指標的位址存在b指標中,則b指標就是指向指標的指標。

4、指標函式與函式指標

4.1、

指標函式是指帶指標的函式,即本質是乙個函式。

函式返回型別是某一型別的指標

型別識別符號*函式名(參數列)

int *f(x

,y);

首先它是乙個函式,僅僅只是這個函式的返回值是乙個位址值。

函式返回值必須用同型別的指標變數來接受。

float *fun();

float *p;

p = fun(a);

4.2、函式指標是指向函式的指標變數,即本質是乙個指標變數

int (*f) (int x); /* 

宣告乙個函式指標*/

指向函式的指標包括了函式的位址,能夠通過它來呼叫函式。宣告格式例如以下:

型別說明符 (*函式名)(引數)

假設沒有圓括號,就變成了乙個返回整型指標的函式的原型宣告。

比如:void (*fptr)();

把函式的位址賦值給函式指標,能夠採用以下兩種形式:

fptr=&function;

fptr=function;

取位址運算子&沒必要的,由於單單乙個函式識別符號就標號表示了它的位址,假設是函式呼叫,還必須包括乙個圓括號括起來

的參數列。

總結,基本的差別是函式指標是指標變數(必需要用括號括起來),指標函式是函式。

二、引用

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

sizeof(引用)得到的是變數的大小。

1、宣告及初始化

引用的宣告方法:型別識別符號 &引用名=目標變數名。

【例1】:int a; int &ra=a; //定義引用ra,它是變數a的引用。即別名

說明:(1)&在此不是求位址運算,而是起標識作用。

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

。(3)

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

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

ra=1; 等價於 a=1;

(5)宣告乙個引用,不是新定義了乙個變數,它僅僅表示該引用名是目標變數名的乙個別名。它本身不是一種資料型別,因此引用

本身不佔儲存單元。系統也不給引用分配儲存單元。

(6)不能建立陣列的引用。由於陣列是乙個由若干個元素所組成的集合。所以無法建立乙個陣列的別名。

2、引用應用

2.1、引用作為引數

引用的乙個重要作用就是作為函式的引數。曾經的c語言中函式引數傳遞是值傳遞,假設有大塊資料作為引數傳遞的時候,採用

的方案往往是指標,由於 這樣能夠避免將整塊資料所有壓棧,能夠提高程式的效率。

可是如今(c++中)又新增了一種相同有效率

的選擇(在某些特殊情況下又是必須的選擇),就是引 用。

main( )

說明:(1)以引用返回函式值,定義函式時須要在函式名前加&。

(2)用引用返回乙個函式值的最大優點是。在記憶體中不產生被返回值的副本。

3、值傳遞、指標傳遞、引用傳遞

值傳遞不能夠交換引數

指標傳遞、引用傳遞能夠交換引數。但指標傳遞是副本傳遞。浪費記憶體;引用傳遞節省記憶體。

指標與引用

摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...

引用與指標

引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...

指標與引用

include iostream using namespace std void testref int i 10 引用不可以為空,他是乙個物件的別名 int ref i ref cout i 00824f1e mov dword ptr i 1 把i的位址傳入eax 並把eax指標的位址傳給re...