关于数组声明的困惑

时间:2013-04-01 12:16:30

标签: c arrays

这在C中意味着什么:

char strings[USHRT_MAX][50];

是否正在创建一个称为字符串的锯齿状字符数组?

2 个答案:

答案 0 :(得分:5)

不,上面没有创建一个锯齿状的字符串数组。它创建了一个包含两个维度的字符数组,最多可以存储长达49个字符的USHRT_MAX个C字符串(第五十char用于'\0'终止符。)< / p>

锯齿状数组声明如下所示:

char *strings[USHRT_MAX];

使用指针数组,您需要为各个字符串分配内存,但字符串的长度可能会因一个元素而异。另一方面,你的数组已经分配了所有内存,但它限制了字符串的长度,并且有可能使用比存储更短字符串所需更多的内存。

答案 1 :(得分:0)

此:

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']

注意在第二个示例中,它们在每一行中都具有相同数量的元素,但并非所有元素都被填充。