Kol*_*ghu 1 c arrays string ansi-c
我知道如何使用二维数组制作字符串数组,但我可以这样做:
char array[];
array[1]="bob";
array[2]="cat";
Run Code Online (Sandbox Code Playgroud)
是的,但不是你想要的方式。
例如,你可以这样做:
char arr[] = "bob\0cat";
Run Code Online (Sandbox Code Playgroud)
arr包含两个字符串,"bob"起始于arr[0]和"cat"起始于arr[4]。这不是特别方便,因为您必须遍历数组才能找到字符串,但它确实有效地使用了内存。
的每个元素arr都是一个char,因此不能在每个元素中存储一个字符串,但可以连续存储多个字符串。
还有其他方法可以存储字符串列表。最常见的是定义一个char*指针数组,每个指针指向一个在别处分配的字符串(的第一个字符)。的argv参数main是这种方法最常见的例子。
在你的例子中:
char array[];
Run Code Online (Sandbox Code Playgroud)
这是无效的;如果要定义数组对象,则必须指定元素的数量。
array[1]="bob";
array[2]="cat";
Run Code Online (Sandbox Code Playgroud)
这些分配都是无效的。array[1]并且array[2]都是单个char对象。您不能将字符串分配给单个char. 实际上,表达式"bob"被隐式转换为char*指针——您仍然无法将其分配给char对象。
如果你将你定义array为一个char*指针数组,这些赋值将是有效的,实际上这是表示字符串列表的常用方法:
char *array[2]; /* an array of pointers */
array[0] = "bob";
array[1] = "cat";
Run Code Online (Sandbox Code Playgroud)
字符串本身分配在数组之外;该数组包含指向它们的指针。每个指针实际上指向一个char对象,但我们可以使用该指针访问整个字符串。