在c
語言中,對於下面兩個實現交換變數值的函式,因為函式傳參傳的是函式值,swap1()
是完成不了的,而swap2()
可以。
#include
void
swap1
(int a,
int b)
void
swap2
(int
* pa,
int* pb)
intmain
(int argc,
char
**ar**)
執行結果:
初始時a=10,b=20
swap1後,a=10,b=20
swap2後,a=20,b=10
在c++
中可以使用引用,引用沒有使用到新的關鍵字,而是符號&
有了新的作用,這裡的&
表示引用,它是引用定義和識別的關鍵,而不是取位址符號:
void
swap3
(int
& a,
int&b)
引用主要用在函式傳參和返回值,引用符號在定義時必須同時初始化,以後不能再另外賦值,只能使用。
int a=10;
const
int&b = a;
// b=55; 這句編譯報錯
a =44; //編譯沒報錯且執行沒問題
這裡表示b
是a
的const
別名,可以通過a
來修改值,但是無法通過b
修改a
了。
引用加const
修飾主要用在函式形參中,告訴使用者該函式內部不會修改實參的值。某些時候我們有乙個非const
型別的變數,但是我們在某個函式呼叫的過程中,不希望變數的值在函式內部被修改,這時候就可以用const
引用來傳參,使用引用傳遞引數類似於傳位址,無需在函式內部進行資料複製的操作,這樣可以提高效率。
sizeof
引用得到的不是引用本身的大小,而是引用指向的目標變數的大小,但是在struct
或class
中定義乙個引用,再sizeof
整個struct
或class
就會不一樣。
int
&b = a;
類似於:
int
*const b =
&a;
c++
標準並沒有規定引用是否占用記憶體空間,但是大多數編譯器都把引用實現為const
指標,所以大部分編譯器中引用也是要佔記憶體空間的。引用是天然const
的,所以定義時必須初始化指向變數,否則就沒意義了。
引用本質是指標,是位址,所以才能實現傳址呼叫的效果,引用就是指標在定義時增加了把指標變數本身const
化。
深入剖析C 中的引用變數( )
函式的引數分為形參 parameters 和實參 arguments 在閱讀英文注釋或者檢視英文 的時候,可能常常會遇到這兩個單詞,應當知曉它們的區別。前者是在函式定義的時候採用的變數名,並沒有什麼實際的意義。後者則是在函式呼叫的時候實際傳入的引數。函式的引數傳遞方式可以分為值傳遞 指標傳遞和引用傳...
c 中引用和指標剖析
這一篇總結對比比較簡短,更多的是從結構上去剖析 這篇總結對比博主寫得特別好,但是還是比較散,還是推薦看 看完之後你是不是發現自己豁然開朗,看 的 應該會輕鬆許多,嘻嘻。一 引用注意事項 1 引用必須初始化 2 引用在初始化後不可更改 二 引用做函式返回值 格式 型別 函式名 引數 如 int tes...
c 引用引數傳遞的深入剖析
在c 中,資料有2中基本型別 值型別和引用型別 值型別的變數儲存資料,而引用型別的變數儲存對實際資料的引用。在引數傳遞時,值型別是以值的形式傳遞的,是將要傳遞的引數的值複製給函式的形參,因此在函式體類對於該形參的任何改變都不會影響原來的值 引用型別是以物件引用的形式傳遞的,是將要傳遞的物件的引用複製...