http://www.zhihu.com/question/20362192
c++中的字符串常量为什么可以赋值给char*?
比如可以写一下代码:
char*str="hello";
其中的"hello"不是const char*类型吗?为什么可以给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*指针。
C++中"hello"的类型是const char[6],不过为了兼容C代码做了特殊处理,所以也允许赋值给char*指针。
2.
决定权在你, 这只是一个地址, 对于c来说, 这完全没问题, 但是你如果修改这个串的话, 就直接猝死.
对于c++来说, 编译器可能会做隐式转换, 但仍然会给你一个友情提示. 总而言之, 不要过份依赖编译器.
认真关注每一个警告.
对于c++来说, 编译器可能会做隐式转换, 但仍然会给你一个友情提示. 总而言之, 不要过份依赖编译器.
认真关注每一个警告.