2016-03-27 51 views
0

我想弄清楚在c中的二維數組的內存佈局是如何工作的。尤其是字符串數組。我知道應該怎麼讀this site二維字符串數組的C內存佈局

後的工作,但在做分配時一樣

char *states[] = { 
    "California", "Oregon", 
    "Washington", "Texas" 
}; 

是行大小自動設定爲匹配最長字符串的大小?

我試圖找出使用下面的代碼,但我仍然沒有得到它。

int main(){ 
    char *test[] = { 
    "0", "12", 
    "345", "6789" 
    }; 
    int i = 0; 
    int j = 0; 
    for (i=0; i<10; i++){ 
    for (j=0; j<10; j++){ 
    printf("%d,%d: ", i,j); 
    printf("%c\n", test[i][j]); 
    } 
} 
return 0; 
} 

我有所有的行應該具有相同的大小,但似乎是下一個字符串通過遍歷數組時,一個空格後立即啓動的感覺。

在此先感謝!

回答

0

實際上並沒有二維char數組。相反,您有一個char指針的一維數組。在二維char數組中,所有字符串都會爲其分配完全相同的內存量。你的情況在很多方面實際上更簡單。編譯器創建了一堆常量字符串,並用這些指針初始化你的char *數組。每個字符串都有自己的獨立長度。

這裏是你如何定義一個真正的二維數組char

char states[][11] = { 
    "California", 
    "Oregon", 
    "Washington", 
    "Texas" 
}; 

這裏的字符串長度是明確的(最多10個字符,再加上1空字節)。每個字符串都被賦予全部字符數,無論它是否全部使用它們。