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