您好,登錄后才能下訂單哦!
關于二維數組中數組元素的存儲地址,有同學問出了個好問題。
在我的課件中,出現了下面的講解:
a[i][j]
的地址是p+(i*col+j)*d
(d是數組元素所占的字節數)。
同學編程序進行驗證,出問題了:
地球停止轉動了也必須先贊這種學習方式!
同學問:“老師,第一張圖的4,我怎么覺得不對呢?第二張圖我沒4,結果好像也對,這里面差在哪呢?”
我的答復:“兩個都對。”
第一張圖在講原理,是我們在人腦里面要以“字節”為單位計算,p為首地址,單位是字節,再往后多少個字節,必須考慮到在整型數組中每個數組元素占4個字節,從首地址到a[i][j]
有(i*col+j)
個元素,計算其字節地址時,乘4是必要的。
第二張圖是在計算機中的運行結果,是已經在計算機內按找第幾“個”數組元素為單位計算地址值了,*4的操作,是在尋址中已經計算過了,在此直接輸出結果。
更直白地,第一張圖中的“p+”中的加,和我們日常算術中的加一樣,我們按“字節”說事;而第二張圖中的“p+”,是C語言中指針的加運算,是增加一個單元,究竟多少字節,還要考慮指向的元素的數據類型,在32位系統中,對于整型,一個單元4字節,而對于double型,一個單元8字節。
兩個加號形狀一樣,含義是不同。
這個問題,學C/C++的同學才可能會遇到,學習C/C++中主動尋疑驗證的同學才會遇到。可見學C/C++的價值,可見主動尋疑驗證的價值。
想起離散數學中的代數結構,用符號任意地表達運算,研究或設計運算系統,好一個“讓思緒飛揚”和”精彩世界“,一不留神卻成了“枯燥乏味”和“與實踐無關”。
能從不同層面,不同視角看問題,這就是自由。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。