引用和指標

2021-08-09 05:11:13 字數 1652 閱讀 3730

引用和指標

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

以傳值方式,在函式呼叫過程中會生成乙份臨時變數用形參代替,最終把實參的值傳遞給新分

配的臨時變數即形參。它的優點是避免了函式呼叫的***,確無法改變形參的值。

如果要改變實參的值,只能通過指標傳遞。

void swap (int

left, int

right)

void swap (int *_pleft , int * _pright)

指標可以解決問題,但不是很形象友好,不安全,因此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

//【相同點】

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

//【不同點】

void testrefandpoint()

總結

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

2、一旦乙個引用被初始化為指向乙個物件,就不能再指向

其他物件,而指標可以在任何時候指向任何乙個同型別物件

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

4、在sizeof中含義不同:引用結果為引用型別的大小,

但指標始終是位址空間所佔位元組個數。

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

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

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

下面的程式有問題嗎?

void swap(int &left, int &right)

int main()

指標和引用,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...

指標和引用

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