[英]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.