資料介紹
《數(shù)據(jù)結(jié)構(gòu) C語言 》電子教案免費下載
轉(zhuǎn)變二、????????????? 聲明位置的轉(zhuǎn)變
?? C語言里,變量聲明必須放在一個函數(shù)的開頭,但在C++里,卻不需要這么做,你可以在任何地方聲明一個變量。而且,建議你盡量等需要用的時候再去定義一個變量。
轉(zhuǎn)變?nèi)????????????? 引用類型的引入
先來看下面一個例子:
#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
寫出這個程序的人,它編寫的swap函數(shù)本意是想讓兩個參數(shù)的值互相交換。但是,我們知道,C語言里參數(shù)的傳遞都是以值傳遞的方式進行的,也就是說,這里將把作為實參的a,b的值賦值給作為形參的a,b,這樣形參與實參并不是同一片內(nèi)存空間,對形參a所做的賦值操作根本不會對實參a有任何的影響,所以最終會發(fā)現(xiàn)這個swap函數(shù)根本沒有起到任何作用。
作為C語言高手的你會告訴我,想實現(xiàn)兩個數(shù)交換,應該這么寫:
#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ù)里傳遞兩個變量的地址。總是讓人感到不太直觀。
C++里就出現(xiàn)了引用類型。
這樣,原程序就可以這么寫
#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);
}
這樣,這個swap函數(shù)就對它的兩個參數(shù)a,b的值進行了交換。
你可能會驚奇的問:什么?竟然在形參聲明時對a取地址?
咱們先撇開上面的例子來說一下引用類型變量:
1.?????? 引用類型相當于給變量起了一個別名
變量名就是一個用以標識一片內(nèi)存區(qū)域的標識符,而聲明引用變量就相當于給這片內(nèi)存區(qū)域重新起了一個名字。這句話你現(xiàn)在看肯定不太清楚它是什么意思,但,請帶著這句話看下面的幾點
2.?????? 引用類型變量的初始化
定義一個引用類型的變量時,這個&僅僅是用來表示聲明的變量是是引用類型變量(而并非取地址的意思)。如
int a=123;
int &b=a;??????
b就是一個引用類型變量,它綁定在一個int類型的變量a上。如果現(xiàn)在輸出b的值,就會得到b的值為123.
我們定義一個引用類型的變量時,必須用它所綁定的類型的一個變量對它進行初始化。
int a=123;
int &b1=a;????? //正確
int &b2;??????? //錯誤,必須初始化
int &b3=123;??? //錯誤,必須用int型變量來進行初始化,而不能用常量來初始化。
3.?????? 對引用類型變量進行賦值
先來看下面一段代碼。
int a=123,b=234;
int &c=a;
c=b;
這時,a和c的值是多少?
有兩種想法,第一種想法是c=b的意思和初始化時c=a那里差不多,表示讓c從現(xiàn)在起開始綁定到b.所以a的值是123,c的值是234,這種想法很有依據(jù),那就是指針變量就是這個樣子,不過我可以很負責任的告訴你,這種想法在這里是錯誤的,至少,編譯器和你的想法不一樣。事實上,除了初始化的時候之外,你對一個引用類型的變量進行任何的操作,都相當于對它所綁定的變量進行了相同的操作,這個“任何”是包括賦值操作的。所以,這里c=b就相當于是a=b,執(zhí)行了該操作后,a,c的值都變?yōu)?34。
好,現(xiàn)在我們再來回頭看一下前面那個程序,為了區(qū)別形參a,b和實參a,b,這里我把實參a,b記作a',b'.
形參列表里的int &a,int &b就相當于int &a'=a,int &'b=b
這樣,a'綁定到了a上,成了a的另一個名字,b'就成了b的另一個名字,因此,對a',b'做的任何操作,都相當于對a,b進行了對應操作,這也就使形參與實參共用了同一片內(nèi)存地址,便可以實現(xiàn)在函數(shù)中改變實參的值了。
這樣,swap函數(shù)才真正直到了交換兩個參數(shù)的值的作用。
4.?????? const引用
const引用就是綁定在const對象上的引用。
如 const int data=123;
const int& data2=data;????? //正確
int &data3=data;??????????????? //錯誤
//不能將int&型變量綁定在const int型變量上
但,可以用const int&變量綁定在int型變量上。如:
int data=123;
const int &data2=data;????? //正確
此后,可以利用給data賦值來給這片內(nèi)存區(qū)域賦值,但卻不能給data2賦值,因為data2是const int&型。
由于引用類型作為參數(shù)時,不是真正的值傳遞,形參與實參共用同一片內(nèi)存區(qū)域,所以在用一些大的結(jié)構(gòu)體對象或大的類對象(類是一種與結(jié)構(gòu)體類似,但比結(jié)構(gòu)體強大得多的東西,本書后面大部分內(nèi)容都是在講它)作參數(shù)時,可以把函數(shù)的形參聲明為引用類型,以減小值傳遞所帶來的開銷。而且,在多數(shù)情況下,為了避免做為實參的對象在函數(shù)內(nèi)不被修改,可以把形參設(shè)置為const引用。
- 數(shù)據(jù)結(jié)構(gòu)與算法分析課件免費下載 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析—C語言描述 17次下載
- 什么是數(shù)據(jù)結(jié)構(gòu)?為什么要學習數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應用實例分析 14次下載
- 為什么要學習數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)結(jié)構(gòu)的應用詳細資料概述免費下載 13次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析的C語言描述的電子教材詳細資料免費下載 0次下載
- 30G最全最新小甲魚視頻教程匯編語言c語言c++DELPHI數(shù)據(jù)結(jié)構(gòu)Python資料下載 58次下載
- 數(shù)據(jù)結(jié)構(gòu)-C語言描述(陳慧南) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)C++語言描述 0次下載
- 數(shù)據(jù)結(jié)構(gòu)(C語言版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析C++描述(第3版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析:C語言描述(原書第2版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)與算法分析(C語言版) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)(C#語言版) 0次下載
- C語言課程設(shè)計電子教案(課件) 0次下載
- 數(shù)據(jù)結(jié)構(gòu)教程,下載 0次下載
- 探索編程世界的七大數(shù)據(jù)結(jié)構(gòu) 955次閱讀
- C語言數(shù)據(jù)結(jié)構(gòu)之跳表詳解 1.9k次閱讀
- 不同數(shù)據(jù)結(jié)構(gòu)的定義代碼 1.2k次閱讀
- 嵌入式軟件常見的8種數(shù)據(jù)結(jié)構(gòu) 1.7k次閱讀
- SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu) 2.5k次閱讀
- 解析數(shù)據(jù)結(jié)構(gòu)的常用七大排序算法 2.3k次閱讀
- 使用51單片機讀寫AT29C040的C語言程序免費下載 5.8k次閱讀
- 什么是數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)及數(shù)據(jù)之間的關(guān)系分析 8.3k次閱讀
- 數(shù)據(jù)結(jié)構(gòu)有哪些知識重點 2.7k次閱讀
- 嵌入式C語言中的組成結(jié)構(gòu)是什么 941次閱讀
- 區(qū)塊鏈的基本數(shù)據(jù)結(jié)構(gòu)解析 8.1k次閱讀
- 介紹pandas的兩種數(shù)據(jù)結(jié)構(gòu) 5.9k次閱讀
- java中幾種常用數(shù)據(jù)結(jié)構(gòu) 1.5w次閱讀
- 數(shù)據(jù)結(jié)構(gòu)常見的八大排序算法 2k次閱讀
- java數(shù)據(jù)結(jié)構(gòu)學習 995次閱讀
下載排行
本周
- 1MDD品牌三極管BC807數(shù)據(jù)手冊
- 3.00 MB | 次下載 | 免費
- 2MDD品牌三極管BC817數(shù)據(jù)手冊
- 2.51 MB | 次下載 | 免費
- 3MDD品牌三極管D882數(shù)據(jù)手冊
- 3.49 MB | 次下載 | 免費
- 4MDD品牌三極管MMBT2222A數(shù)據(jù)手冊
- 3.26 MB | 次下載 | 免費
- 5MDD品牌三極管MMBTA56數(shù)據(jù)手冊
- 3.09 MB | 次下載 | 免費
- 6MDD品牌三極管MMBTA92數(shù)據(jù)手冊
- 2.32 MB | 次下載 | 免費
- 7STM32G474 HRTIME PWM 丟波問題分析與解決
- 1.00 MB | 次下載 | 3 積分
- 8新能源電動汽車高壓線束的銅鋁連接解決方案
- 2.71 MB | 次下載 | 2 積分
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
- 0.63 MB | 6次下載 | 1 積分
- 5UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費
- 6技嘉H110主板IT8628E_BX IO電路圖資料
- 2.61 MB | 4次下載 | 1 積分
- 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 8蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論