【C语言基础】指向字符串的指针 & 字符串常量指针的关系
1.【C 语言基础】转义字符基础总结2.【C 语言基础】通过一个实例了解 va_list3.【C 语言基础】 scanf()、gets()输入字符串的区别
4.【C语言基础】指向字符串的指针 & 字符串常量指针的关系
5.【C 语言基础】C语言字符串拷贝详解6.【C 语言基础】以空格分割字符串问:指向字符串的指针 与 字符串常量指针有什么区别?
答:经过实践 指向字符串的指针 就是字符串常量指针。
字符串常量指针是常量指针的一种。常量指针的特点就是不能通过该指针来修改指向内存地址空间存储的值。
问:
来看一下常见面试题
char *p = “abcd”; *p = ‘b’; printf("%c\n", p[0]);
以上代码有什么问题?
答:
首先,编译器在常量区保存一个字符串abcd,其内容不许修改。
char *p = “abcd”; // p是一个指针,直接指向常量区,修改p[0]就是修改常量区的内容,这是不允许的。这正是常量指针的特点。
这里指针p就是一个常量指针,更具体一点说就是字符串常量指针。定义语句 char *p ="abcd";
相当于 const char *p = "abcd";
"abcd"这个字符串程序没有给它分配空间,编译器把它分配到常量区,即全局(静态)变量区。
而以下通过数组的形式定义的,则是可以修改的。
char p[] = “abcd”; // 编译器在栈上创建一个字符串p,把abcd从常量区复制到p,修改p[0]就是修改一个局部变量,这是允许的。
测试代码:
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 7 char a[] = "hello"; 8 a[0] = 'X'; //正常运行 9 10 char *p = "world"; // 注意p 指向常量字符串, 这里p就 相当于 常量指针 11 //p[0]= 'x'; //编译不会报错,但是运行会报错,因为不允许通过指针来修改指针p指向内存空间存储的值 12 13 return 0; 14 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具