这在 C 中是什么意思:
char strings[USHRT_MAX][50];
它是否创建了一个称为字符串的锯齿状字符数组?
不,上面不会创建一个锯齿状的字符串数组。它创建了一个二维字符数组,能够存储最多USHRT_MAX
49 个字符的 C 字符串(第 50 个字符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']
请注意,在第二个示例中,它们在每行中都有相同数量的元素,但并非所有元素都被填充。