字符串常量是一个字符数组,例如:
“Hello world”
在字符串的内部表示中,字符数组以空字符'\0'结尾,所以,程序可以通过检查空字符找到字符数组的结尾。字符串常量占据存储单元数也因此比双引号内的字符数大1。
字符串常量最常见的用法也许是作为函数参数,例如:
printf("Hello world\n");
当类似于这样一个字符串出现在程序中时,实际上是通过字符指针访问该字符串的。在上述语句中,printf接受的是一个指向字符数组第一个字符的指针。也就是说,字符串常量可以通过一个指向其第一个元素的指针访问。
char *message;
message = "I am hungry";
将把一个指向该字符数组的指针赋给message。该过程并没有进行字符串的复制,而是只是涉及到指针的操作。C语言没有提供将整个字符串作为整体进行处理的运算符。
下面两个定义之间有很大的差别:
char *amessage[ ] = "I am hungry"; /*定义一个数组*/
char *pmessage = "I am hungry" /*定义一个指针*/
上述声明中,amessage是一个仅仅足以存放初始化字符串以及空字符串'\0'的一维数组。数组中的单个字符可以进行修改,但amessage始终指向同一个存储位置。另一方面,pmessage是一个指针,其初值指向一个字符串常量,之后它可以被修改以指向其他地址,但如果试图修改字符串的内容,结果是没有意义的。