...不管那个问题的答案。
为什么没有[]中的2个?
语义可能会影响您对数组及其索引要求的理解。 C有一个用于int和char数组,每个数组都需要一组[]来定义。 C有一种特殊的char数组,通常称为C String ,它只是一个常规char数组,最后一个字符为空终止符: \\0 。 C strings数组通常确实使用两组括号: [][] 。 用于表示规则char阵列是相同的那些用于表示int阵列。 两者都可以描述为存储在连续的一组存储位置中的值的集合。 为了说明,示例int , char和C string数组如下:
int numarr[] = {99,104,97,114,32,97,114,114,97,121,0};
char chararr1[] = {'c','h','a','r',' ','a','r','r','a','y','\0'};
char chararr2[] = {99,104,97,114,32,97,114,114,97,121,0};
char string[] = {"char array"};
上面四个示例中的每个数组值都是相同的。 在大多数实现中, int数组存储在一个连续的4字节存储位置集中,而每个char数组存储在一个连续的1字节的存储位置集中。 这三个char数组(如果在printf()使用printf()将导致相同的字符串输出,因为每个都是以null值终止的char数组。
printf("%s\n%s\n%s\n", chararr1, chararr2, string);
字符数组
字符数组
字符数组
更多关于特殊char阵列- C字符串 ,和C字符串数组
char string[] = {"this is a string"};
C字符串定义为char的空终止数组: ^之间标记的内容是上面定义的string 。 注意空终止。
|t|h|i|s| |i|s| |a| |s|t|r|i|n|g|\0|?|?|
^ ^
但是,可以使用两组方括号来表示一组连续的C字符串或C字符串数组 :
char strings[2][20] = {"first string", "second string"};
此字符串数组在内存中将如下所示:
|f|i|r|s|t| |s|t|r|i|n|g|\0|s|e|c|o|n|d| |s|t|r|i|n|g|\0|?|?|?|
| | | |
[0] | | [1] 1st index used to access full string
[0][4]='t' [0][10]='n' 2nd index used to access array elements
虽然可以使用第一个索引访问每个字符串,
eg. strings[0] = "first string" and strings[1] = "second string"
每个字符串的每个字符都可以使用第一个索引和第二个索引进行访问
eg. strings[0][0] == 'f' and strings[1][0] == 's'