C++二維數(shù)組中數(shù)組元素存儲地址的計算疑問講解
關(guān)于二維數(shù)組中數(shù)組元素的存儲地址,有同學(xué)問出了個好問題。
在我的課件中,出現(xiàn)了下面的講解:
a[i][j]
的地址是p+(i*col+j)*d
(d是數(shù)組元素所占的字節(jié)數(shù))。
同學(xué)編程序進(jìn)行驗證,出問題了:
地球停止轉(zhuǎn)動了也必須先贊這種學(xué)習(xí)方式!
同學(xué)問:“老師,第一張圖的4,我怎么覺得不對呢?第二張圖我沒4,結(jié)果好像也對,這里面差在哪呢?”
我的答復(fù):“兩個都對?!?/p>
第一張圖在講原理,是我們在人腦里面要以“字節(jié)”為單位計算,p為首地址,單位是字節(jié),再往后多少個字節(jié),必須考慮到在整型數(shù)組中每個數(shù)組元素占4個字節(jié),從首地址到a[i][j]
有(i*col+j)
個元素,計算其字節(jié)地址時,乘4是必要的。
第二張圖是在計算機(jī)中的運行結(jié)果,是已經(jīng)在計算機(jī)內(nèi)按找第幾“個”數(shù)組元素為單位計算地址值了,*4的操作,是在尋址中已經(jīng)計算過了,在此直接輸出結(jié)果。
更直白地,第一張圖中的“p+”中的加,和我們?nèi)粘K阈g(shù)中的加一樣,我們按“字節(jié)”說事;而第二張圖中的“p+”,是C語言中指針的加運算,是增加一個單元,究竟多少字節(jié),還要考慮指向的元素的數(shù)據(jù)類型,在32位系統(tǒng)中,對于整型,一個單元4字節(jié),而對于double型,一個單元8字節(jié)。
兩個加號形狀一樣,含義是不同。
這個問題,學(xué)C/C++的同學(xué)才可能會遇到,學(xué)習(xí)C/C++中主動尋疑驗證的同學(xué)才會遇到??梢妼W(xué)C/C++的價值,可見主動尋疑驗證的價值。
想起離散數(shù)學(xué)中的代數(shù)結(jié)構(gòu),用符號任意地表達(dá)運算,研究或設(shè)計運算系統(tǒng),好一個“讓思緒飛揚”和”精彩世界“,一不留神卻成了“枯燥乏味”和“與實踐無關(guān)”。
能從不同層面,不同視角看問題,這就是自由。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- C++?使用?new?創(chuàng)建二維數(shù)組實例
- c++利用vector創(chuàng)建二維數(shù)組的幾種方法總結(jié)
- C++二維數(shù)組螺旋加密信息
- C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法
- C++二維數(shù)組中的查找算法示例
- C++中指針指向二維數(shù)組實例詳解
- C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實例代碼
- 詳解C++中的一維數(shù)組和二維數(shù)組
- C++指針數(shù)組、數(shù)組指針、數(shù)組名及二維數(shù)組技巧匯總
- C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼
相關(guān)文章
C語言實現(xiàn)字符轉(zhuǎn)unix時間戳的簡單實例
下面小編就為大家?guī)硪黄狢語言實現(xiàn)字符轉(zhuǎn)unix時間戳的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建
這篇文章主要介紹了C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Qt結(jié)合libqrencode生成二維碼的實現(xiàn)示例
本文主要介紹了Qt結(jié)合libqrencode生成二維碼的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷實例分析
這篇文章主要介紹了C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷,實例分析了C++實現(xiàn)圖的存儲與遍歷技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04