3.1.將引用用於結構
引用非常適合用於結構和類,而引入引用的目的也是為了用於這些型別。
有如下結構定義:
struct free_throws
;//則可以這樣編寫函式原型:
void set_pc(free_throws & ft);
//如果不希望函式修改傳入的機構,可使用const:
void display(const free_throws & ft);
下面通過乙個示例來展示如何將引用用於結構,並展示它一些有趣的特點:
#include
#include
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 three = ;
free_throws four = ;
free_throws five = ;
free_throws team = ;
free_throws dup;
set_pc(one);
display(one);
accumulate(team, one);
display(team);
//有趣的地方①
display(accumulate(team, two));
accumulate(accumulate(team, three), four);
display(team);
dup = accumulate(team, five);
std::cout
<< "displaying team:\n";
display(team);
set_pc(four);
accumulate(dup, five) = four; //②
std::cout
<< "displaying dup after ill advised assignment:\n";
display(dup);
system("pause");
return0;}
void display(const free_throws & ft)
//函式set_pc的**設定成員percent,按值傳遞不可行,所以按引用傳遞
void set_pc(free_throws & ft)
else
}//函式accumulate()接收兩個結構引數,並將第二個結構的成員attempts和made的資料新增到第乙個結構的相應成員中。
free_throws & accumulate(free_throws & target, const free_throws & source)
輸出為:
這樣的操作並不好。
newguy為臨時變數的引用,函式執行完畢後它將不再存在,為避免這種問題,最好返回乙個作為引數傳遞給函式的引用,作為引數的引用將指向呼叫函式使用的資料,因此返回的引用也將指向這些資料。另一種方法是用new來分配新的儲存空間:
第一條語句建立乙個無名的free_throws結構,並讓指標pt指向該結構,因此*pt就是該結構。上述**似乎會返回該結構,但函式宣告表面,該函式實際上將返回這個結構的引用。const free_thorws & clone(free_throws & ft)
{ free_throws * pt;
*pt= = ft;
return *pt;
呼叫clone()隱藏了對new的呼叫,這使得以後很容易忘記使用delete來釋放記憶體。
函式探幽(1) 引用(1)
1.引用變數 引用是已定義的變數的別名 另乙個名稱 如 有一變數x,而y作為變數x的引用,則可以交替使用x和y來表示該變數。就像有兩個單詞表示同乙個意思。int cats int tomcats cats 其中,不是位址運算子,而是型別識別符號的一部分。上述宣告允許將cats與tomcats互換 它...
總結3 引用
int a 10 int b a b就是a的別名 b 200 修改變數a中的內容 printf a d n b d n a,b a 與 b 的位址是相同的 在c中相當於以下效果 int const b a b 200 1.1 普通引用 舉例void swap int a,int b 1.2 引用所佔...
函式探幽(二) 引用變數,預設引數
1 預設引數 函式在宣告時可以預先定義預設的形參值。呼叫時若給出實參則用實參初始化形參,如果沒有給出實參則採用預先定義的預設形參值。假設有乙個名為left 的函式,它將字串和n作為引數,並返回該字串的前n個字元。更準確地說,該函式返回乙個指標,該指標指向由原始字串被選中的部分組成的字串。例如,函式呼...