C/C++ 數(shù)組和指針及引用的區(qū)別
C/C++ 數(shù)組和指針及引用的區(qū)別
1.數(shù)組和指針的區(qū)別
(1)定義
數(shù)組是一個(gè)符號,不是變量,因而沒有自己對應(yīng)的存儲空間。但是,指針是一個(gè)變量,里面存儲的內(nèi)容是另外一個(gè)變量的地址,因?yàn)槭亲兞克灾羔樣凶约旱膬?nèi)存空間,只不過里面存儲的內(nèi)容比較特殊。
(2)區(qū)別
a.對于聲明和定義,指針和數(shù)組是不相同的,定義為數(shù)組,則聲明也應(yīng)該是數(shù)組,不可混淆
b.當(dāng)作下標(biāo)操作符時(shí),指針和數(shù)組是等價(jià)的。a[i]會被編譯器翻譯成*(a+i).
c.當(dāng)數(shù)組聲明被用作函數(shù)形參的時(shí)候,數(shù)組實(shí)際會被當(dāng)作指針來使用。
(3)從匯編角度分析
**int i = 10;** 00C44CC8 mov dword ptr [i],0Ah **int * p = &i;** (1) 00C44CCF lea eax,[i] 00C44CD2 mov dword ptr [p],eax **int arr[5] = {0};**(2) 00C44CD5 mov dword ptr [arr],0 00C44CDC xor eax,eax 00C44CDE mov dword ptr [ebp-30h],eax 00C44CE1 mov dword ptr [ebp-2Ch],eax 00C44CE4 mov dword ptr [ebp-28h],eax 00C44CE7 mov dword ptr [ebp-24h],eax
解釋:
(1)lea先取i的地址,然后存入p指向的空間中,足夠證明p有自己的空間。
(2)沒給數(shù)組明分配空間
2. 數(shù)組和引用區(qū)別
(1)定義
引用是是給一個(gè)變量起的別名,引用必須要初始化,引用一經(jīng)定義不能被改變,初始化的值必須要能取地址,訪問引用變量,永遠(yuǎn)訪問的是它所引用的變量的內(nèi)存。
(2)區(qū)別
C語言中沒有引用,C++11之前只有一級引用,之后有左引用和右引用。
(3)匯編角度
**int i = 10;** 00ED4CBE mov dword ptr [i],0Ah **int &a = i;** 00ED4CC5 lea eax,[i] 00ED4CC8 mov dword ptr [a],eax
如有疑問,請留言或者到本站社區(qū)交流討論,共同進(jìn)步,感謝閱讀,希望能幫助到到大家,謝謝大家對本站的支持!
相關(guān)文章
C++算法之在無序數(shù)組中選擇第k小個(gè)數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C++算法之在無序數(shù)組中選擇第k小個(gè)數(shù)的實(shí)現(xiàn)方法,涉及C++數(shù)組的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-03-03C++ std::initializer_list 實(shí)現(xiàn)原理解析及遇到問題
這篇文章主要介紹了C++ std::initializer_list 實(shí)現(xiàn)原理勘誤,本文通過源碼解析給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02C++中實(shí)現(xiàn)保存數(shù)據(jù)到CSV文件
這篇文章主要介紹了C++中實(shí)現(xiàn)保存數(shù)據(jù)到CSV文件方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C語言常用標(biāo)準(zhǔn)頭文件使用實(shí)例
在C的系列語言程序中,頭文件(通常擴(kuò)展名為.h)被大量使用,它通常包含函數(shù)、變量、結(jié)構(gòu)體等的聲明和定義,以及一些宏定義和類型定義,這篇文章主要給大家介紹了關(guān)于C語言常用標(biāo)準(zhǔn)頭文件使用的相關(guān)資料,需要的朋友可以參考下2024-08-08實(shí)例講解在C++的函數(shù)中變量參數(shù)及默認(rèn)參數(shù)的使用
這篇文章主要介紹了在C++的函數(shù)中變量參數(shù)及默認(rèn)參數(shù)的使用,是C++函數(shù)入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01opencv3/C++關(guān)于移動對象的輪廓的跟蹤詳解
今天小編就為大家分享一篇opencv3/C++關(guān)于移動對象的輪廓的跟蹤詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12C++中二進(jìn)制數(shù)據(jù)序列化和反序列化詳解
這篇文章主要為大家詳細(xì)介紹了C++中二進(jìn)制數(shù)據(jù)序列化和反序列化的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11