char* a[] 和 char a[] 的区别
char* a[] 和 char a[] 是 C 语言中数组的不同声明方式,二者具有以下区别:
char a[] 声明的是一个字符数组,其中存储的是一串字符。此时,a 可以被视为一个指向字符的指针。
char* a[]则声明了一个指针数组,即一个由指向字符的指针组成的数组。
下面来分别讨论它们的用法:
char a[]
假设现在需要定义一个字符串变量,并对其赋值:
char myString[] = "Hello World";
可以看到,在使用 char a[] 时,可以在定义该数组时直接给其赋初始值(初始化),同时数组的长度会根据初始值自动计算,因此可以省略数组长度的定义(如 char myString[12])。使用时,可以直接使用数组名 myString 或通过指针间接使用。
也就是说,在这里面 myString[0] = 'H'
char* a[]
现在需要定义一个由多个字符数组组成的指针数组,可以这样定义:
char* allStrings[] = {"string1", "string2", "string3"};
此时,allStrings 就是一个指向字符指针的数组。在使用 char* a[] 时,需要在定义数组时赋初始值,即字符串指针。其中,每个元素都是指向相应字符串的指针。例如上述代码,allStrings 数组包含有三个元素,每个元素都是一个字符串的地址。allStrings[0] == "string1"
当需要访问字符串内容时,可以使用类似于 *(allStrings + 1) 的方法,直接定位到字符串指针的位置,然后再输出字符串内容。
总之,虽然 char a[] 和 char* a[] 都涉及到指针和数组,但前者主要用于定义和操作字符数组,而后者则用于构建由字符串指针构成的数组。
总结
char *a[] 就是一个字符串数组,char a[] 就是一个字符数组