这在C中意味着什么:
char strings[USHRT_MAX][50];
是否正在创建一个称为字符串的锯齿状字符数组?
答案 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']
注意在第二个示例中,它们在每一行中都具有相同数量的元素,但并非所有元素都被填充。