2013-04-01 126 views
-1

这是什么意思在C:混淆数组声明

char strings[USHRT_MAX][50]; 

难道是塑造人物的锯齿状排列称为串?

+1

在发布这样的简单问题之前,先学习一些基础知识。 – Kishore

回答

5

不,上面不会创建锯齿状的字符串数组。它创建了一个包含两个维度的字符数组,能够存储长达49个字符的C字符串(第50个char用于终止符'\0')。

交错数组的声明是这样的:

char *strings[USHRT_MAX]; 

随着你就需要为各个串分配内存指针数组,但字符串的长度能由一个元素不同而有所变化。另一方面,你的数组分配了所有的内存,但是它限制了字符串的长度,并且有可能使用比存储较短字符串更多的内存。

+0

啊,好的谢谢你。所以我认为,如果USHRT_MAX大于49个字符,它会覆盖相邻的堆栈位置。 – user2153547

+0

@ user2153547如果您尝试访问'strings [stringNumber] [charNumber]',并且'stringNumber'大于或等于'USHRT_MAX',那么您的程序可能会崩溃。如果'stringNumber'小于'USHRT_MAX',但'charIndex'大于49,那么你的程序也可能会崩溃。无论它是否要覆盖相邻的堆栈位置,都是特定于实现的:'strings'可能位于静态内存中,或者可能根本没有堆栈。 – dasblinkenlight

0

此:

char strings[USHRT_MAX][50]; 

只是提供字符的2维阵列。大小为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'] 

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