2013-04-01 124 views
-1

這是什麼意思在C:混淆數組聲明

char strings[USHRT_MAX][50]; 

難道是塑造人物的鋸齒狀排列稱爲串?

+1

在發佈這樣的簡單問題之前,先學習一些基礎知識。 – Kishore

回答

5

不,上面不會創建鋸齒狀的字符串數組。它創建了一個包含兩個維度的字符數組,能夠存儲長達49個字符的C字符串(第50個char用於終止符'\0')。

交錯數組的聲明是這樣的:

char *strings[USHRT_MAX]; 

隨着你就需要爲各個串分配內存指針數組,但字符串的長度能由一個元素不同而有所變化。另一方面,你的數組分配了所有的內存,但是它限制了字符串的長度,並且有可能使用比存儲較短字符串更多的內存。

+0

啊,好的謝謝你。所以我認爲,如果USHRT_MAX大於49個字符,它會覆蓋相鄰的堆棧位置。 – user2153547

+0

@ user2153547如果您嘗試訪問'strings [stringNumber] [charNumber]',並且'stringNumber'大於或等於'USHRT_MAX',那麼您的程序可能會崩潰。如果'stringNumber'小於'USHRT_MAX',但'charIndex'大於49,那麼你的程序也可能會崩潰。無論它是否要覆蓋相鄰的堆棧位置,都是特定於實現的:'strings'可能位於靜態內存中,或者可能根本沒有堆棧。 – dasblinkenlight

0

此:

char strings[USHRT_MAX][50]; 

只是提供字符的2維陣列。大小爲USHRT_MAX通過50這不是一個交錯數組,交錯數組是一個具有各種長度的行,在概念上,這將是:

strings[0] = ['a']['\0'] 
strings[1] = ['j']['a']['g']['\0'] 
strings[2] = ['a']['r']['r']['a']['y']['\0'] 

凡爲你的更像是:

strings[0] = ['a']['\0'][ ][ ][ ][ ] 
strings[1] = ['j']['a']['g']['\0'][ ][ ] 
strings[2] = ['a']['r']['r']['a']['y']['\0'] 

注意在第二個例子中,它們在每一行中都有相同數量的元素,但並不是所有元素都被填充。