簡體   English   中英

關於數組聲明的困惑

[英]Confusion about array declaration

這在C中是什么意思:

char strings[USHRT_MAX][50];

它會創建一個鋸齒狀的字符串數組嗎?

不,上面沒有創建鋸齒狀的字符串數組。 它創建一個二維字符數組,最多可以存儲49個字符長的USHRT_MAX C字符串(第五USHRT_MAX char用於'\\0'終止符)。

鋸齒狀的數組聲明如下所示:

char *strings[USHRT_MAX];

使用指針數組時,您需要為各個字符串分配內存,但是字符串的長度可能從一個元素到另一個元素不同。 另一方面,您的數組已分配了所有內存,但是它限制了字符串的長度,並且有可能使用比存儲較短的字符串所需的更多內存。

這個:

char strings[USHRT_MAX][50];

僅提供二維字符數組。 大小為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']

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM