2016-07-29 26 views
0

在編寫關於有限內存情況的問題的答案時,我想知道是否可以通過使用平面數組而不是(矩形)二維數組來保存任何內存空間(其大小爲在編譯時已知)。平面和2D陣列使用相同數量的內存嗎?

因此, char a[200][100]使用比char a[20000]更多的內存空間?

(我知道它在某些語言,但是這是專門關於C)

+2

它將佔用與一維數組相同數量的內存,唯一的區別是它們如何被訪問。 – ameyCU

回答

1

[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列。這讓編譯器爲你做計算。

3

所以,確實如char a[200][100]使用比char a[20000]更多的內存空間?

不,char a[200][100]使用與char a[20000]相同的內存容量。

兩者都需要可以容納的連續內存20000char s。