C 引用變數( )

2021-08-21 20:57:18 字數 1569 閱讀 5010

引用是已定義變數的別名

int a;

int & b = a; // b為a的引用

引用作為函式引數,使得函式中的變數名成為呼叫函式程式中的變數的別名。這種傳遞稱為引用傳遞,按引用傳遞允許被呼叫函式能訪問呼叫函式中的變數。

void swapr(int & a,int & b); // 引用傳遞

void swapv(int a,int b); // 值傳遞

swap()為交換函式,上面三個分別引數為引用、值、指標。經過我的一番測試發現。函式中的值傳遞並不能改變呼叫函式中a , b的值。引用和指標則可以。

// 函式宣告

double cube(double &a)

// 呼叫函式

cube(x+2);

當函式cube()的引用引數應該是可以修改的,但是傳遞的值是(x+2)並不是變數,所以編譯時會出現錯誤。

但是,如果在引用前加上const程式就能執行了,const指定引用不能被修改,所以是否為變數也就不重要了。但是編譯器會為其建立乙個臨時變數,儲存(x+2),然後將 a 成為臨時變數的引用。

那麼什麼情況下會建立臨時變數呢?如果引用引數是const,則編譯器會在下面兩種情況生成臨時變數:

引用非常適合結構和類。引入引用主要是為了用於這些型別,而非用於基本的內建型別。

引用這麼高效為什麼內建型別不使用引用呢?

使用結構變數引用引數和基本變數一用引數相同,就相當於別名,這裡就不贅述了。

引用既然能作為引數,那麼能否作為返回值呢? 答案是肯定的。

為什麼要返回引用呢? 毫無疑問,為了讓程式效率更高。

// 宣告函式:返回值是struct_a 型別的引用

struct_a & run(struct_a & a,const struct_a & b)

// dup接收run的返回值

struct_a dup = run(a,b);

當函式run()返回值為型別時,dup接收的是乙個結構,將把乙個結構複製到乙個臨時位置,再將這個拷貝複製給dup,消耗空間且效率低。

但返回值為引用時,直接將a 複製到dup,效率更高

注意:在返回值為引用時不能返回棧空間的值,函式中建立的臨時變數即使為引用,但是函式結束後棧空間的內容都會被銷毀,返回將會出現錯誤。

使用引用引數的原因:

修改呼叫函式中的函式物件

通過傳遞引用而不是整個資料物件,提高程式的執行速度

當資料物件較大的時候,第二個原因尤為重要。這些也是使用指標引數的原因。

那麼指標引數和引用又有什麼區別呢?

引用引數實際上是基於指標的**的另乙個介面,至此,引用展現了它的廬山真面目,其實它和指標在底層實現沒什麼兩樣,只是在使用上,有時引用會更加順手。

那麼什麼情況下,應該使用何種傳遞引數的方式呢?

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的小名,他們表示的都是乙個東西。就像你叫張三,小名土豆。張三和土豆都是你。說完了引用變數是什麼再來說一下它的用途。引用變數主要的作用是作為函式的引數,來使得函式中的變...