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...