2017-03-18 59 views
0
char pres[4][2][11] = { 
    "George", "Washington", 
    "John", "Adams", 
    "Thomas", "Jefferson", 
    "James", "Monroe" 
}; 

有人可以解釋爲什麼pres數組是三維的嗎?我試着用二維的循環(pres[4][2])顯示pre數組,但是它不起作用。c字符串數組維數

+0

你是怎樣嘗試顯示呢?數組聲明/初始化看起來很好...... – Dmitri

+1

這似乎是一個數組''[8] [11]',即使它有效,您更喜歡'char pres [4] [2] [11] = { {「George」 ,「華盛頓」}, {「John」,「Adams」}, {「Thomas」,「Jefferson」}, {「James」,「Monroe」} };' –

+0

把它想象成2-二維數組的字符串。字符串本身是一維字符數組,並且2 + 1 = 3。 –

回答

-1

這是因爲C中定義了一串字符。在C中,一個字符串只是一個單個字符的數組,如果你想在一個數組中使用多個單詞,則必須給出一個數組數組。

在你的情況下,你想要將字符串分隔成單獨的列,例如C++可以作爲字符串數組[] []給出,但是在C中,您將不得不應用另一個「圖層」來表示字符串他們自己。

+1

「C中的字符串只是單個字符的數組」 - 單詞「just」可能存在問題,因爲這可以理解爲「字符串」和「字符數組」是簡單的同義詞,這是錯誤的。它提醒初學者關於無效終止符的重要性從未受傷。 –

1

這是一個三維字符數組,因爲它在概念上是一個二維數組字符串,而字符串是一維空字符終止數組。

儘管這樣做有效,但這種方法的缺點是它只能保存長度爲10的字符串(爲空終止符留下空間)。出於這個原因,使用char *的數組並傾向於更靈活,然後根據實際字符串的需要分配和釋放空間。你說你試過看pres[4][2]。這是沒有意義的,因爲數組索引是從0開始的。pres[3][1]將是"Monroe" - 數組中的最後一個字符串。

要全部打印出來是非常簡單的:

#include <stdio.h> 

int main(void){ 
    int i; 
    char pres[4][2][11] = { 
     "George", "Washington", 
     "John", "Adams", 
     "Thomas", "Jefferson", 
     "James", "Monroe" 
    }; 
    for(i=0;i<4;i++) printf("President %s %s\n",pres[i][0],pres[i][1]); 
    return 0; 
} 

,輸出:

President George Washington 
President John Adams 
President Thomas Jefferson 
President James Monroe 
+0

感謝您的解釋。 – max

+0

@max如果你是從像Python或Java這樣的語言(大多數情況下)爲你處理所有複雜性的C語言中,C語言中的字符串很難包圍你的思想。 Stack Overflow的共同創始人之一Joel Spolsky撰寫了我曾閱讀過的最好的博客文章之一:https://www.joelonsoftware.com/2001/12/11/back-to-basics/ –

+0

感謝您的來源。 – max