繁体   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