6.5.1 指针与字符串常量
在 C 语言中,用双引号包含的一段字符序列就是字符串常量,例如:
"apple"
常量是 C 语言中最简单的表达式,而所有的表达式都是有值的,那字符串常量的值是什么呢?
字符串常量的值就是字符串中首字符的内存地址。例如 apple 这个字符串常量的值就是其第一个字符 a 的内存地址。因此,我们可以用一个 char 类型的指针来指向这个字符串。例如:
char *pstr = "apple";
定义一个 char 类型的指针变量 pstr,并将字符串常量 apple 作为其初始值。编译器就会将字符串 apple 中的第一个字符 a 的内存地址作为指针变量 pstr 的初始值。因此,可以认为 pstr 是一个指向字符 a 的指针,由于字符 a 是字符串 apple 的首字符,所以,还可以认为 pstr 是一个指向字符串 apple 的指针。
可以通过指针 pstr 来访问和打印它所指向的字符,例如:
printf("character: %c\n", *pstr);
通过对指针 pstr 进行解引用访问到字符 a,并以“%c”(字符)的格式打印输出。
编译运行程序,结果如下:
character: a
还可以通过指针 pstr 来访问和打印它所指向的字符串,例如:
printf("string: %s\n", pstr);
需要注意的是,这次是以“%s”(字符串)的格式来打印,因此直接将指针 pstr 作为参数,不需要对它进行解引用。即打印字符串时,需要的是指向首字符的指针,而非字符。
编译运行程序,结果如下:
string: apple
可见,单凭一个字符类型的指针是无法断定它所指向的到底是一个字符还是一个字符串。也许字符指针只是指向一个字符的,也许字符指针指向的是一个字符串。对于指向字符串的字符指针,我们既可以用字符的方式来访问,也可以使用字符串的方式来访问。但对于仅是指向单字符的字符指针,不要用字符串的方式来访问,否则会出现乱码字符。
当字符指针指向一个字符串常量时,要时刻注意,不要试图使用该指针来修改字符串的内容,例如:
*pstr = 'A';
该语句的作用是通过对指针 pstr 进行解引用访问到字符串首字符 a,并用大写字母 A 对其重新赋值,即想把字符串的首字符由小写字母 a 修改为大写字母 A。但由于指针所指向的是一个字符串常量,字符串的内容是不允许被修改的,因此,该语句虽然能通过编译,但在程序运行时会造成运行错误而引发崩溃。
所以,最好在定义指针变量时通过 const 将其修饰为常量指针,例如:
const char *pstr = "apple";
这样就不能通过指针来修改它所指向的字符串了,就算是强行修改,也会在编译时,产生错误信息。例如:
*pstr = 'A';
此时对程序进行编译,就会出现如下错误信息:
error: assignment of read-only location '*pstr'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论