C 中的引用與指標

2021-08-09 18:39:58 字數 1586 閱讀 9984

c語言中函式有兩種傳參的方式:傳值和傳址。

傳值方式,在函式呼叫過程中會生成乙份臨時變數用形參代替,最終把實參的值傳遞給新分配的臨時變數,即形參。它的優點是避免了函式呼叫的***,卻無法改變形參的值。如果要改變實參的值,只能通過位址傳參。

例如:傳值

void swap (int

left, int

right)

int main()

void swap (int

*_pleft , int * _pright)

int main()

指標可以解決問題,但不是很形象友好,不安全,因此c++中引入了一種新的符合型別–>引用。

1、引用概念

引用不是新定義乙個變數,而是給已存在變數取了乙個別名,編譯器不會為引用變數開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。

void testref()

【引用特性】

1. 引用在定義時必須初始化。

2. 乙個變數可以有多個引用。

3. 引用一旦繫結了乙個實體,就不能將該引用的變數再改變為其他變數的引用。

void testref()

【常引用】

void testconstref()

2、使用場景

【函式形參】

void swap(int &_ileft, int &_iright)

【返回值】

int add(int _ileft, int _iright)

int& add(int & _ileft, int& _iright)

注意:不要返回棧記憶體的引用

struct strtest

;void funtest0(const strtest& test)

{}void funtest1()

int iend = gettickcount();

cout

<3、引用與指標的區別

相同點:底層的實現方式相同,都是按照指標的方式來實現的。

不同點:

1.引用定義時必須初始化,指標可以不用,正常情況下需初始化為null。

2.引用一旦定義就不能再改變其指向其他的變數,但指標可以。

3.可以有多級指標,但是沒有多級引用。

1、引用在定義時必須初始化,指標沒有要求。

2、一旦乙個引用被初始化為指向乙個物件,就不能再指向其他物件,而指標可以在任何時候指向任何乙個同型別物件。

3、沒有null引用,但有null指標。

4、在sizeof中含義不同:引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數。

5、引用自加改變變數的內容,指標自加改變了指標指向。

6、有多級指標,但是沒有多級引用。

7、指標需要手動定址,引用通過編譯器實現定址。

7、引用比指標使用起來相對更安全。

C 中的指標與引用

1.物件指標和一般的指標的大小都只與作業系統有關,32位系統就是4位元組,64位就是8位元組 2.c 在建立物件的時候 會給物件的每乙個成員變數分配一定的儲存空間,以存放其成員 注意位元組對齊問題 3.所以乙個物件的大小 就是其成員變數的總大小 4.指向物件成員的指標 p t1.hour 將物件t1...

c 中的指標與引用

引用 不是定義乙個變數,而是給已經存在的變數取乙個別名,所以引用一定要初始化 定義的格式 型別 引用名 已定義過的變數名 引用的特點 1.變數可以有多個別名 2.引用必須要初始化 3.乙個引用不可為多個變數,並且不可變 4.在引用是可以加限制,但不能少限制 乙個例子 int a 100 int b ...

C 中的指標 引用 指標引用

在c 指標的用處很大,可以快讀的訪問位址空間,而且本身不佔太大記憶體。指標操作在引數傳遞的時候非常方便。既可以作為傳入引數,又可以作為返回值。但是可不可作為函式的傳出引數呢?下面通過乙個例子來說明。教室裡面包含多個老師,每個老師管理多個學生 學生類 pragma once include class...