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 2013-04-22 21:38  紫金树下  阅读(867)  评论(0编辑  收藏  举报