在編寫關於有限內存情況的問題的答案時,我想知道是否可以通過使用平面數組而不是(矩形)二維數組來保存任何內存空間(其大小爲在編譯時已知)。平面和2D陣列使用相同數量的內存嗎?
因此, char a[200][100]
使用比char a[20000]
更多的內存空間?
(我知道它在某些語言,但是這是專門關於C)
在編寫關於有限內存情況的問題的答案時,我想知道是否可以通過使用平面數組而不是(矩形)二維數組來保存任何內存空間(其大小爲在編譯時已知)。平面和2D陣列使用相同數量的內存嗎?
因此, char a[200][100]
使用比char a[20000]
更多的內存空間?
(我知道它在某些語言,但是這是專門關於C)
[200] [100]和[20000]之間沒有區別。對於[200] [100] C,使用列數來計算偏移量,因爲a只是指向char類型的內存的指針。所以如果你想要[20] [5],那麼C就會計算[20] [5] = *(a + 20 * 100 + 5)。我應該提到C是行主要的(或者在計算中首先使用行)。
所以,如果你知道你的數組的尺寸,你可以用[20000]做同樣的計算。
從軟件通信的角度來看,如果它是靜態的,我會使用char a [200] [100],因爲它的通信結構是200行×100列。這讓編譯器爲你做計算。
所以,確實如
char a[200][100]
使用比chara[20000]
更多的內存空間?
不,char a[200][100]
使用與char a[20000]
相同的內存容量。
兩者都需要可以容納的連續內存20000
char
s。
它將佔用與一維數組相同數量的內存,唯一的區別是它們如何被訪問。 – ameyCU