字符数组:
char job = "teacher";
字符指针:
char *job = "teacher";
解析:上面两个声明中的job都可以用作字符串。任何期望传递字符数组与字符指针的函数都能够接受这两种声明的job作为参数。但是这两种job不能互换,两者也有很大的差异:
区别:
- 在声明为数组时,就像任意数组元素一样,可以修改存储在job中的字符。在声明为指针时,job指向字符串字面量,而字符串字面量是不可以修改的。
- 在声明为数组时,job是数组名。在声明为指针时,job是指针变量,这个变量可以在程序执行期间指向其他字符串。
- 如果需要修改字符串,那么就要建立字符数组来存储字符串,声明为指针变量是不够的。
应用:
下面的声明使编译器为指针变量分配了足够的内存空间
char *p;
但是它不能为字符串分配空间,因为我们没有指明字符串的长度。在使用p
作为字符串之前,必须把p指向字符数组。例如以下的一种可能是把p
指向已经存在的字符串变量:
char str[STR_LEN+1], *p;
p = str;
现在p
指向了str
的第一个字符,所以可以把p
作为字符串使用了。