資料介紹
《數(shù)據(jù)結(jié)構(gòu) C語(yǔ)言 》電子教案免費(fèi)下載
轉(zhuǎn)變二、????????????? 聲明位置的轉(zhuǎn)變
?? C語(yǔ)言里,變量聲明必須放在一個(gè)函數(shù)的開(kāi)頭,但在C++里,卻不需要這么做,你可以在任何地方聲明一個(gè)變量。而且,建議你盡量等需要用的時(shí)候再去定義一個(gè)變量。
轉(zhuǎn)變?nèi)????????????? 引用類型的引入
先來(lái)看下面一個(gè)例子:
#include
void swap(int a,int b)
{
???? int temp=a;
???? a=b;
???? b=temp;
}
int main()
{
???? int a=1,b=2;
???? swap(a,b);
???? printf("a=%d,b=%d",a,b);
}
輸出結(jié)果:
a=1,b=2
寫(xiě)出這個(gè)程序的人,它編寫(xiě)的swap函數(shù)本意是想讓兩個(gè)參數(shù)的值互相交換。但是,我們知道,C語(yǔ)言里參數(shù)的傳遞都是以值傳遞的方式進(jìn)行的,也就是說(shuō),這里將把作為實(shí)參的a,b的值賦值給作為形參的a,b,這樣形參與實(shí)參并不是同一片內(nèi)存空間,對(duì)形參a所做的賦值操作根本不會(huì)對(duì)實(shí)參a有任何的影響,所以最終會(huì)發(fā)現(xiàn)這個(gè)swap函數(shù)根本沒(méi)有起到任何作用。
作為C語(yǔ)言高手的你會(huì)告訴我,想實(shí)現(xiàn)兩個(gè)數(shù)交換,應(yīng)該這么寫(xiě):
#include
void swap(int *a,int *b)
{
???? int temp=*a;
???? *a=*b;
???? *b=temp;
}
int main()
{
???? int a=1,b=2;
???? swap(&a,&b);
???? printf("a=%d,b=%d",a,b);
}
確實(shí),這個(gè)程序能達(dá)到交換兩個(gè)值的效果,可是,我們要操作的是兩個(gè)變量的值,而不是其地址,卻需要往函數(shù)里傳遞兩個(gè)變量的地址。總是讓人感到不太直觀。
C++里就出現(xiàn)了引用類型。
這樣,原程序就可以這么寫(xiě)
#include
void swap(int &a,int &b)???????? //只有這一行與原來(lái)的程序不同
{
???? int temp=a;
???? a=b;
???? b=temp;
}
int main()
{
???? int a=1,b=2;
???? swap(a,b);
???? printf("a=%d,b=%d",a,b);
}
這樣,這個(gè)swap函數(shù)就對(duì)它的兩個(gè)參數(shù)a,b的值進(jìn)行了交換。
你可能會(huì)驚奇的問(wèn):什么?竟然在形參聲明時(shí)對(duì)a取地址?
咱們先撇開(kāi)上面的例子來(lái)說(shuō)一下引用類型變量:
1.?????? 引用類型相當(dāng)于給變量起了一個(gè)別名
變量名就是一個(gè)用以標(biāo)識(shí)一片內(nèi)存區(qū)域的標(biāo)識(shí)符,而聲明引用變量就相當(dāng)于給這片內(nèi)存區(qū)域重新起了一個(gè)名字。這句話你現(xiàn)在看肯定不太清楚它是什么意思,但,請(qǐng)帶著這句話看下面的幾點(diǎn)
2.?????? 引用類型變量的初始化
定義一個(gè)引用類型的變量時(shí),這個(gè)&僅僅是用來(lái)表示聲明的變量是是引用類型變量(而并非取地址的意思)。如
int a=123;
int &b=a;??????
b就是一個(gè)引用類型變量,它綁定在一個(gè)int類型的變量a上。如果現(xiàn)在輸出b的值,就會(huì)得到b的值為123.
我們定義一個(gè)引用類型的變量時(shí),必須用它所綁定的類型的一個(gè)變量對(duì)它進(jìn)行初始化。
int a=123;
int &b1=a;????? //正確
int &b2;??????? //錯(cuò)誤,必須初始化
int &b3=123;??? //錯(cuò)誤,必須用int型變量來(lái)進(jìn)行初始化,而不能用常量來(lái)初始化。
3.?????? 對(duì)引用類型變量進(jìn)行賦值
先來(lái)看下面一段代碼。
int a=123,b=234;
int &c=a;
c=b;
這時(shí),a和c的值是多少?
有兩種想法,第一種想法是c=b的意思和初始化時(shí)c=a那里差不多,表示讓c從現(xiàn)在起開(kāi)始綁定到b.所以a的值是123,c的值是234,這種想法很有依據(jù),那就是指針變量就是這個(gè)樣子,不過(guò)我可以很負(fù)責(zé)任的告訴你,這種想法在這里是錯(cuò)誤的,至少,編譯器和你的想法不一樣。事實(shí)上,除了初始化的時(shí)候之外,你對(duì)一個(gè)引用類型的變量進(jìn)行任何的操作,都相當(dāng)于對(duì)它所綁定的變量進(jìn)行了相同的操作,這個(gè)“任何”是包括賦值操作的。所以,這里c=b就相當(dāng)于是a=b,執(zhí)行了該操作后,a,c的值都變?yōu)?34。
好,現(xiàn)在我們?cè)賮?lái)回頭看一下前面那個(gè)程序,為了區(qū)別形參a,b和實(shí)參a,b,這里我把實(shí)參a,b記作a',b'.
形參列表里的int &a,int &b就相當(dāng)于int &a'=a,int &'b=b
這樣,a'綁定到了a上,成了a的另一個(gè)名字,b'就成了b的另一個(gè)名字,因此,對(duì)a',b'做的任何操作,都相當(dāng)于對(duì)a,b進(jìn)行了對(duì)應(yīng)操作,這也就使形參與實(shí)參共用了同一片內(nèi)存地址,便可以實(shí)現(xiàn)在函數(shù)中改變實(shí)參的值了。
這樣,swap函數(shù)才真正直到了交換兩個(gè)參數(shù)的值的作用。
4.?????? const引用
const引用就是綁定在const對(duì)象上的引用。
如 const int data=123;
const int& data2=data;????? //正確
int &data3=data;??????????????? //錯(cuò)誤
//不能將int&型變量綁定在const int型變量上
但,可以用const int&變量綁定在int型變量上。如:
int data=123;
const int &data2=data;????? //正確
此后,可以利用給data賦值來(lái)給這片內(nèi)存區(qū)域賦值,但卻不能給data2賦值,因?yàn)閐ata2是const int&型。
由于引用類型作為參數(shù)時(shí),不是真正的值傳遞,形參與實(shí)參共用同一片內(nèi)存區(qū)域,所以在用一些大的結(jié)構(gòu)體對(duì)象或大的類對(duì)象(類是一種與結(jié)構(gòu)體類似,但比結(jié)構(gòu)體強(qiáng)大得多的東西,本書(shū)后面大部分內(nèi)容都是在講它)作參數(shù)時(shí),可以把函數(shù)的形參聲明為引用類型,以減小值傳遞所帶來(lái)的開(kāi)銷。而且,在多數(shù)情況下,為了避免做為實(shí)參的對(duì)象在函數(shù)內(nèi)不被修改,可以把形參設(shè)置為const引用。
- 數(shù)據(jù)結(jié)構(gòu)與算法分析課件免費(fèi)下載 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析—C語(yǔ)言描述 17次下載
- 什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應(yīng)用實(shí)例分析 14次下載
- 為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應(yīng)用詳細(xì)資料概述免費(fèi)下載 13次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析的C語(yǔ)言描述的電子教材詳細(xì)資料免費(fèi)下載 0次下載
- 30G最全最新小甲魚(yú)視頻教程匯編語(yǔ)言c語(yǔ)言c++DELPHI數(shù)據(jù)結(jié)構(gòu)Python資料下載 56次下載
- 數(shù)據(jù)結(jié)構(gòu)-C語(yǔ)言描述(陳慧南) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)C++語(yǔ)言描述 0次下載
- 數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析C++描述(第3版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析:C語(yǔ)言描述(原書(shū)第2版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析(C語(yǔ)言版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)(C#語(yǔ)言版) 0次下載
- C語(yǔ)言課程設(shè)計(jì)電子教案(課件) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)教程,下載 0次下載
- 探索編程世界的七大數(shù)據(jù)結(jié)構(gòu) 284次閱讀
- C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之跳表詳解 703次閱讀
- 不同數(shù)據(jù)結(jié)構(gòu)的定義代碼 523次閱讀
- 嵌入式軟件常見(jiàn)的8種數(shù)據(jù)結(jié)構(gòu) 799次閱讀
- SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu) 1448次閱讀
- 解析數(shù)據(jù)結(jié)構(gòu)的常用七大排序算法 1568次閱讀
- 使用51單片機(jī)讀寫(xiě)AT29C040的C語(yǔ)言程序免費(fèi)下載 4529次閱讀
- 什么是數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)及數(shù)據(jù)之間的關(guān)系分析 7271次閱讀
- 數(shù)據(jù)結(jié)構(gòu)有哪些知識(shí)重點(diǎn) 2297次閱讀
- 嵌入式C語(yǔ)言中的組成結(jié)構(gòu)是什么 653次閱讀
- 區(qū)塊鏈的基本數(shù)據(jù)結(jié)構(gòu)解析 7422次閱讀
- 介紹pandas的兩種數(shù)據(jù)結(jié)構(gòu) 5465次閱讀
- java中幾種常用數(shù)據(jù)結(jié)構(gòu) 1.4w次閱讀
- 數(shù)據(jù)結(jié)構(gòu)常見(jiàn)的八大排序算法 1804次閱讀
- java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) 728次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1490次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 92次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7藍(lán)牙設(shè)備在嵌入式領(lǐng)域的廣泛應(yīng)用
- 0.63 MB | 3次下載 | 免費(fèi)
- 89天練會(huì)電子電路識(shí)圖
- 5.91 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論
查看更多