C 引用變數筆記

2021-08-11 05:50:13 字數 2929 閱讀 6709

引用是已定義的變數的別名,引用的主要用途是用作函式的形參。通過將引用變數用作引數,函式將使用原始資料而不是其副本。

c和c++使用&符號來指示變數的位址。c++給&賦予了另乙個含義,將其用來宣告引用變數。例如,將rodents作為rats變數的別名,可以這樣做

int rats;

int & rodents = rats; //makes rodents an alias for rats

&不是位址運算子,而是型別標誌符的一部分。int & 是指向int的引用。上述引用宣告允許rats與rodents互換—他們指向相同的值與記憶體單元。

對於c語言使用者而言,首次接觸到引用時可能會有些困惑,因為這些使用者很自然的想到指標,但是他們之間是有區別的。例如,可以建立指向rats的引用和指標:

int rats = 101;

int & rodents = rats; //rodents a reference

int * prats = &rats; //prats a pointer

這樣,表示式rodents(值)和*prats(值)都可以與rats(值)互換,而表示式&rodents(位址)與prats(位址)都可以通&rats(位址)互換。從這一點上來看,引用很像偽裝表示的指標。但是,引用還是不同於指標的。除了表示法不同外,差別之一是,必須在宣告引用時將其初始化,而不能像指標那樣,先宣告,再賦值:

int rat;

int & rodent;

rodent = rat; //no, you can't do this

注意:必須在宣告引用變數時進行初始化。引用更接近construction指標,必須在建立時進行初始化,一旦與某個變數關聯起來,就將一直效忠於他。也就是說:

int & rodents =rats;
實際上是下述**的偽裝表示:

int * const pr = &rats;
其中,引用rodents扮演的角色與表示式*pr相同。

引用經常用作函式引數,使得函式中的變數名成為呼叫程式中的變數別名。這種傳遞引數的方法稱為按引用傳遞。按引用傳遞允許被呼叫的函式能夠訪問呼叫函式中的變數。c語言只能按值傳遞,按值傳遞導致被呼叫函式使用呼叫程式的值的拷貝。c語言避開按值傳遞的限制使用的是按指標傳遞方式。

比較函式swapr()(按引用傳遞)與swapv()(按值傳遞)的**。唯一的外在區別是宣告函式引數的方式不同。

void swapr(int & a, int & b)

void swapv(int a, int b)

內在的區別在於,在swapr()中,變數a和b是wallet1和wallet2的別名,所以變換a和b的值相當於交換wallet1與wallet2的值,但在swapv()中,變數a和b是複製了wallet1與wallet2的值的新變數,因此交換a與b的值不會影響wallet1與wallet2的值。

void swapr(int & a, int & b)
另乙個區別是指標版本需要在函式使用p和q的整個過程中使用解除引用運算子*。

下面看乙個例子:

#include 

double cube(double a);

double refcube(double &ra);

int main()

double cube(double a)

double refcube(double &ra)

執行結果:

refcube()函式修改了main()中的x值,而cube()沒有,這提醒我們為何通常按值傳遞。變數a位於cube()中,他被初始化為x的值,但是修改a並不會影響x。但是由於refcube()使用了引用引數,因此修改ra實際上就是修改x。如果想要讓函式傳遞給他資訊時不對這些資訊進行修改,同時又想使用引用,則應該使用常量引用。例如,在這個例子中,應在函式原型和函式頭中使用const:

double refcube(const

double & ra);

但是,這樣做在進行編譯時會生成錯誤資訊,具體報錯資訊如下:

應盡可能使用const

將引用引數宣告為敞亮資料的引用的理由有三個:

1. 使用const可以避免無意中修改資料的程式設計錯誤;

2. 使用const使函式能夠處理const和非const實參,否則只能接受非const資料。

3. 使用const引用使函式能夠正確生成並使用臨時變數。

因此,應盡可能將引用形參宣告為const。

C 引用變數( )

1 建立引用變數 1 必須在宣告引用變數時進行初始化 int rat int rodent rat 可以通過初始化宣告來設定引用,但不能通過賦值來設定。nt rat int rodent rat int b 50 rodent b 這裡rodent依然是rat變數的別名,只是現在rat和rodent...

C 引用變數

一,引用變數 c 新增了一種復合型別 引用變數。引用是已定義變數的別名,使用引用變數的主要的用途是作為函式的引數。通過將引用變數用作引數,通過形參就可以對原始的資料進行修改。這樣除指標之外,引用也為函式處理class與struct提供了一種非常方便的途徑。二,宣告引用變數 c與c 使用 來獲取變數的...

C 引用變數

首先說一下,引用變數是什麼?引用變數是已定義的變數的別名 即另乙個名字 舉個例子 int x 100 int y x 現在y就相當於x的小名,他們表示的都是乙個東西。就像你叫張三,小名土豆。張三和土豆都是你。說完了引用變數是什麼再來說一下它的用途。引用變數主要的作用是作為函式的引數,來使得函式中的變...