C 「引用」的多種使用情況

2021-10-05 19:23:09 字數 2181 閱讀 3809

引用就是操作同一塊位址空間,是變數的「別名」,而不是單獨的變數,不會單獨分配儲存單元,所以操作乙個變數,引用的變數也會跟著變化;

變數不僅可以有多個引用,還可以多重引用。但需要注意的是,定義時必須初始化,且只能作為乙個變數的別名不能再成為其他變數的別名(貌似也沒有賦值語句能實現);

引用不是指標,但和指標常量很類似。

不能建立引用的陣列,因為它是一系列元素的組合,但是可以建立陣列的引用。

#

include

using

namespace std;

void

func

(int

(&array)[3

])intmain()

;func

(array)

;// 正確:陣列的引用 (函式引數,可以對比一下指標)

// int& r_array[3] = array[3]; // 錯誤:引用的陣列

return0;

}/*輸出結果:

val = 10 addr: 0x6ffdf4

r_val = 10 addr: 0x6ffdf4

r_val2 = 10 addr: 0x6ffdf4

rr_val = 10 addr: 0x6ffdf4

***************************

val2 = 12 addr: 0x6ffdf0

rr_val = 12 addr: 0x6ffdf4

***************************

2*/

前面說到引用是乙個「別名」,修改其中乙個另外乙個也會跟著變化,所以如果不希望引用影響原變數,可以定義為常引用。

int val;

const

int& r_val = val;

val =1;

// 正確

r_val =2;

// 錯誤,有const限定

另外,加上const之後引用的型別可以不同,如:

double d =

3.1415926

;const

int&i = d;

加上const還可以引用常量:

const

double

& d =

12.3

;double

& d =

12.3

;// 錯誤,需要加上const限定

引用作為函式的引數可以改變原本的值,因為函式內部操作引用就相當於操作原變數。

#

include

using

namespace std;

void

swap1

(int a,

int b)

;// 值傳遞

void

swap2

(int

*a,int

*b);

// 指標傳遞

void

swap3

(int

& a,

int& b)

;// 引用傳遞

intmain()

void

swap1

(int a,

int b)

void

swap2

(int

*a,int

*b)void

swap3

(int

& a,

int& b)

函式可以返回乙個引用,可以免去編譯器拷貝返回值這一步驟。但需要注意的是,返回的引用不能是區域性自動變數,因為函式結束後棧的記憶體就被自動釋放掉了,和返回指標類似。

#

include

using

namespace std;

int array1[10]

=;int&

func1

(int i)

/* 出錯,函式執行結束區域性自動變數占用的棧記憶體被釋放了

int &func2(int i)

; return array[i];}*/

intmain()

ExecutorService使用情況

1 executorservice是是乙個介面,繼承了executor 2 而executor亦是乙個介面,該介面只包含了乙個方法void execute runnable command 3 executors 該類是乙個輔助類,此包中所定義的 executor executorservice s...

前端This使用情況

一 普通函式的this指向window。二 物件方法中this指向呼叫者。三 建構函式中this。1 function newperson name,age const p1 new person 張三 18 return的內容為基本資料型別為p1,return的內容為引用資料型別為其本身 cons...

檢測USB使用情況

此方法放在任何地方,都可以正常.procedure tform1.usb var msg tmessage const dbt devicearrival 8000 dbt deviceremovecomplete 8004 dbt devnodes changed 0007 begin case ...