引用是已定義的變數的別名。通過將引用變數用作引數,函式將使用原始資料,而不是其副本。
int rats;
int& rodents = rats;
int& 指的是指向int的引用。
#include
using
namespace std;
intmain()
從以上**可知,a和b的值和位址表都相同,將b++將影響這兩個變數。
宣告引用時必須將其初始化,而指標可以先宣告再賦值。以下**是絕對不允許的。
int a;
int& b;
b = a;
按引用傳遞允許被呼叫的函式能夠訪問呼叫函式中的變數。
下面的code展示了按引用和按指標傳遞能夠完成交換兩個變數的值,而按值傳遞是不可以的。
#include
using
namespace std;
void
swapr
(int
& a,
int& b)
;void
(int
* p,
int* q)
;void
swapv
(int a,
int b)
;int
main()
void
swapr
(int
& a,
int& b)
void
(int
* p,
int* q)
void
swapv
(int a,
int b)
引用傳遞會改變傳遞引數的值
#include
using
namespace std;
double
cube
(double a)
;double
refcube
(double
& ra)
;int
main()
double
cube
(double a)
double
refcube
(double
& ra)
如果使用按引用傳遞值時不想讓函式改變傳遞的值,可以使用const宣告:
double
refcube
(const
double
& ra)
;
這樣當ra的值被更改時,編譯器在會在檢查語法時就報錯。
注意不能將表示式傳遞給接受引用引數的函式。如
double z =
refcube
(x +3)
;
左值:可被引用的資料物件。常規變數和const變數都可以視為左值,因為可以通過位址訪問它們。前者屬於可以修改的左值,後者反之。
非左值:字面常量和包含多項的表示式。
對於該函式:
double
refcube
(double
& ra)
如果傳遞的是常量或表示式,這些情況下編譯器將生成乙個臨時匿名變數,並讓ra指向它,這種臨時變數只在函式呼叫期間存在,此後編譯器可以隨意將其刪除。
refcube
(7.0);
double side =
3.0;
refcube
(side +
1.0)
;
若型別不正確,也不能通過編譯器的校驗:
long edge =5l;
refcube
(edge)
;
因為double引用不能指向long。
乙個按引用傳遞結構的例子:
#include
#include
using
namespace std;
struct free_throws
;void
display
(const free_throws& ft)
;void
set_pc
(free_throws& ft)
;free_throws&
accumulate
(free_throws& target,
const free_throws& source)
;int
main()
; free_throws two =
; free_throws team =
;set_pc
(one)
;display
(one)
;accumulate
(team, one)
;display
(team)
;display
(accumulate
(team, two));
}//這個函式也可以按值傳遞結構,但與賦值原始結構的拷貝相比,使用引用可以節省時間和記憶體
void
display
(const free_throws& ft)
void
set_pc
(free_throws& ft)
else
}//返回型別是引用
free_throws&
accumulate
(free_throws& target,
const free_throws& source)
比如這條語句
dup =
accumulate
(team, five)
;
如果accumulate返回乙個結構,那麼將把整個結構複製到乙個臨時位置,再將這個拷貝複製給dup;但在返回值為引用時,將直接把team複製到dup,效率更高!
應該避免返回函式終止時不再存在的記憶體單元引用。應避免如編寫下述**:
const free_throws&
clone
(free_throws& ft)
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的小名,他們表示的都是乙個東西。就像你叫張三,小名土豆。張三和土豆都是你。說完了引用變數是什麼再來說一下它的用途。引用變數主要的作用是作為函式的引數,來使得函式中的變...