C/C++編程筆記:C++中的引用!(含引用和指針的對比)

當(dāng)將變量聲明為引用時(shí),它將成為現(xiàn)有變量的替代名稱。通過在聲明中添加“&”,可以將變量聲明為引用。?
C++:

輸出:?x = 20 ref= 30
應(yīng)用范圍:?
修改函數(shù)中傳遞的參數(shù):如果函數(shù)收到對變量的引用,則可以修改變量的值。例如,以下程序變量使用引用進(jìn)行交換。?
C++:

1.避免?復(fù)制大型結(jié)構(gòu):想象一個(gè)必須接收大型對象的函數(shù)。如果我們通過它而沒有引用,則會(huì)創(chuàng)建它的新副本,這會(huì)浪費(fèi)CPU時(shí)間和內(nèi)存。我們可以使用引用來避免這種情況。
C++:

2.在“對于每個(gè)循環(huán)”中修改所有對象:我們可以在“對每個(gè)循環(huán)”中使用引用來修改所有元素?
C++:

3.對于每個(gè)循環(huán),避免?對象的復(fù)制:當(dāng)對象較大時(shí),我們可以在每個(gè)循環(huán)中使用引用來避免單個(gè)對象的復(fù)制。 ?
C++:

參考與指針:
引用和指針都可以用于更改另一個(gè)函數(shù)內(nèi)部的一個(gè)函數(shù)的局部變量。當(dāng)作為參數(shù)傳遞給函數(shù)或從函數(shù)返回時(shí),它們都還可以用于保存大對象的副本,以提高效率。盡管有上述相似之處,引用和指針之間還是存在以下差異。
1.可以將指針聲明為void,但是引用永遠(yuǎn)不能為void。例如
整數(shù)a = 10;void * aa =&a;//有效無效
&ar = a; //無效
2.指針變量具有n級/多級間接尋址,即單指針,雙指針,三指針。而參考變量僅具有一個(gè)/單個(gè)間接級別。以下代碼揭示了上述要點(diǎn): ?

?引用的功能不如指針
1)創(chuàng)建引用后,以后就不能再引用其他對象了;它無法重新放置。這通常是通過指針完成的。?
2)引用不能為NULL。指針通常被設(shè)置為NULL,以指示它們沒有指向任何有效的對象。?
3)引用必須在聲明時(shí)進(jìn)行初始化。指針沒有這種限制
由于上述限制,C ++中的引用不能用于實(shí)現(xiàn)鏈接列表,樹等數(shù)據(jù)結(jié)構(gòu)。在Java中,引用沒有上述限制,可以用于實(shí)現(xiàn)所有數(shù)據(jù)結(jié)構(gòu)。Java中引用更強(qiáng)大是Java不需要指針的主要原因。
更安全,更易于使用:?
1)更安全:由于必須先初始化引用,所以不太可能存在諸如野指針之類的野引用。仍然有一些引用不能引用有效位置
2)易于使用:引用不需要解引用運(yùn)算符即可訪問該值。它們可以像普通變量一樣使用。僅在聲明時(shí)才需要“&”運(yùn)算符。同樣,可以使用點(diǎn)運(yùn)算符('。')訪問對象引用的成員,這與需要箭頭運(yùn)算符(->)訪問成員的指針不同。
結(jié)合上述原因,在諸如復(fù)制構(gòu)造函數(shù)參數(shù)之類的地方很少有不能使用指針的地方。必須使用引用在復(fù)制構(gòu)造函數(shù)中傳遞參數(shù)。同樣,必須使用引用來重載某些運(yùn)算符,例如++。
希望對你有幫助!
另外如果你想更好的提升你的編程能力,學(xué)好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對你有幫助的~
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
編程學(xué)習(xí)書籍分享:

編程學(xué)習(xí)視頻分享:
