随笔 - 147  文章 - 5  评论 - 6  阅读 - 81298

c++中的字符串常量为什么可以赋值给char*?

http://www.zhihu.com/question/20362192

 

c++中的字符串常量为什么可以赋值给char*?

比如可以写一下代码:
char*str="hello";
其中的"hello"不是const char*类型吗?为什么可以给char*赋值?

1.

 
C中"hello"类型是char[6],所以允许char* str="hello"; 你甚至可以接着使用 *str = "d" 这样赋值,编译通过没问题只不过会在运行时报错,因为"hello"位于只读存储区不允许写操作。
C++中"hello"的类型是const char[6],不过为了兼容C代码做了特殊处理,所以也允许赋值给char*指针。
 

2.

 
"hello" 在这里是一个地址, char * 类型指向一个地址的话,没有问题, 至于地址的内容能否修改是另一回事 

3.

决定权在你, 这只是一个地址, 对于c来说, 这完全没问题, 但是你如果修改这个串的话, 就直接猝死.
对于c++来说, 编译器可能会做隐式转换, 但仍然会给你一个友情提示. 总而言之, 不要过份依赖编译器.
认真关注每一个警告.
posted on   紫金树下  阅读(880)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2013年4月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11

点击右上角即可分享
微信分享提示