C 中的引用剖析

2021-10-16 09:27:06 字數 1661 閱讀 4808

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; //編譯沒報錯且執行沒問題

這裡表示baconst別名,可以通過a來修改值,但是無法通過b修改a了。

引用加const修飾主要用在函式形參中,告訴使用者該函式內部不會修改實參的值。某些時候我們有乙個非const型別的變數,但是我們在某個函式呼叫的過程中,不希望變數的值在函式內部被修改,這時候就可以用const引用來傳參,使用引用傳遞引數類似於傳位址,無需在函式內部進行資料複製的操作,這樣可以提高效率。

sizeof引用得到的不是引用本身的大小,而是引用指向的目標變數的大小,但是在structclass中定義乙個引用,再sizeof整個structclass就會不一樣。

int

&b = a;

類似於:

int

*const b =

&a;

c++標準並沒有規定引用是否占用記憶體空間,但是大多數編譯器都把引用實現為const指標,所以大部分編譯器中引用也是要佔記憶體空間的。引用是天然const的,所以定義時必須初始化指向變數,否則就沒意義了。

引用本質是指標,是位址,所以才能實現傳址呼叫的效果,引用就是指標在定義時增加了把指標變數本身const化。

深入剖析C 中的引用變數( )

函式的引數分為形參 parameters 和實參 arguments 在閱讀英文注釋或者檢視英文 的時候,可能常常會遇到這兩個單詞,應當知曉它們的區別。前者是在函式定義的時候採用的變數名,並沒有什麼實際的意義。後者則是在函式呼叫的時候實際傳入的引數。函式的引數傳遞方式可以分為值傳遞 指標傳遞和引用傳...

c 中引用和指標剖析

這一篇總結對比比較簡短,更多的是從結構上去剖析 這篇總結對比博主寫得特別好,但是還是比較散,還是推薦看 看完之後你是不是發現自己豁然開朗,看 的 應該會輕鬆許多,嘻嘻。一 引用注意事項 1 引用必須初始化 2 引用在初始化後不可更改 二 引用做函式返回值 格式 型別 函式名 引數 如 int tes...

c 引用引數傳遞的深入剖析

在c 中,資料有2中基本型別 值型別和引用型別 值型別的變數儲存資料,而引用型別的變數儲存對實際資料的引用。在引數傳遞時,值型別是以值的形式傳遞的,是將要傳遞的引數的值複製給函式的形參,因此在函式體類對於該形參的任何改變都不會影響原來的值 引用型別是以物件引用的形式傳遞的,是將要傳遞的物件的引用複製...