引用通常被用在函式形參傳遞的過程中。一般的引數傳遞的過程:將實參進行拷貝,函式中都是對拷貝的變數進行操作,而不是對原變數進行操作。但很多情況下,我們都希望對原變數進行操作.(比如交換兩個變數的數值)。下面先給出一段**:
1 #include "iostream
"2 #include "
string"3
using std::string;4
using
std::cout;
5struct
free_throws;
1112
void display(const free_throws &ft);
13void set_pc(free_throws &ft);
14 free_throws& accmulate(free_throws &target, const free_throws &source);
1516
intmain()17;
19 free_throws two;
20 free_throws three;
21 free_throws four;
22 free_throws five;
23 free_throws team;
24free_throws dup;
25set_pc(one);
26display(one);
27accmulate(team, one);
28display(team);
29display(accmulate(team, two));
30accmulate(accmulate(team, three), four);
31display(team);
32 system("
pause");
33return0;
34}3536
void set_pc(free_throws &ft)
3743
void display(const free_throws &ft)
4450
51 free_throws &accmulate(free_throws &target, const free_throws &source)
52
上述**:描述了引用變數在結構體中的應用,實際上,應用引用變數的地方多在較為複雜的資料結構中。
1.set_pc()的功能是修改結構體成員值(如果我們不採用引用變數,那麼修改的將是拷貝的變數,而非原變數,當然我們也可以採用指標的方式)
2.display()的作用是顯示結構體成員值,需要注意的是:這個程式的功能是顯示結構體成員的值,也就是不對結構體成員作修改。因此引入了const 限定。const表明如果我們試圖在函式函式中修改形參(這裡是ft,也就是被傳遞的結構體,如one),那麼就會出錯。.
關於const的基本性質和原理不再贅述。說明一點:當要被傳遞的引數作為右值時(不被修改),為了程式的健壯性,通常我們會將引數設定為const型別
3 free_throws &accmulate(par1,par2)函式中的par1是被修改的,而par2是右值,因此定義成了const。但這個函式有趣的地方在於,幫我們重新認識了函式:思考什麼是函式?
從組成結構上講,函式包括了這幾個點:函式名(函式的入口位址),函式形參型別及個數,函式的返回值型別(函式名前面的東西)。當每次遇到函式的時候,我們腦海裡要形成對這三個屬性的認識:函式名代表什麼,函式的形參可以是什麼型別?可以有多少個?返回值是什麼型別??可以有多少個?
我們關注這個函式的返回值,發現,並不是我們熟悉的int ,char ,double ,甚至是指標比如int *。這裡返回的是結構體,確切的說是結構體引用。比如我們說指標型別的時候,我們會說int*.因此,我們需要將引用看成乙個型別。這裡是structname &型別。而我們發現,target變數自身就是structname &型別。我們發現,這是吻合的,其實仔細思考原來的,int ,char ,double 甚至指標,函式中被返回的變數的型別。和函式名前的返回型別是一致的!!!
4 引用必須在定義的時候進行初始化,函式傳參也屬於這一種情況。
C 入門 引用詳解
1.引用作為其他變數的別名而存在,因此在一些場合可以代替指標 2.引用相對於指標來說具有更好的可讀性和實用性 3.引用在c 內部實現就是乙個常量指標 const p int a int const a include stdafx.h include include string using nam...
c 入門 引用變數
符合型別 引用變數 引用是以定義變數的別名,常用在作為函式的形參。可直接作用於變數的原始資料,而不是其拷貝。宣告引用 c 使用 來宣告引用。int rats int rodents rats 指標與引用的區別 int rodents rats int prats rats rodents與 prat...
C 之引用揭秘
測試 第二條彙編指令將8這個值儲存到變數a在棧中的空間。第三條指令將變數a的位址放到暫存器eax中。可以看到,eax的值為0x29fefc,這個位址為虛擬位址空間的位址。游標處彙編指令將該值壓入棧中,作為呼叫函式fun 的引數 順表提一下,為什麼指標總是4位元組大小,32位機器,記憶體最大4g,32...