char *tem = "szn";

szn_409 2016-05-03 08:08:36
如题
我的理解应该是:

cosnt char *tem = "szn";

这样才对

为什么

char *tem = "szn";

这样也是对的?
这是语言的规定吗?


"szn"的类型应该是 const char* 吧?
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-05-04
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
赵4老师 2016-05-04
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
小灸舞 2016-05-03
  • 打赏
  • 举报
回复
C++03中的字符串常量const char[N]当具有显而易见的目标类型时,作为一个限定修饰的转换的结果是char*,这是一个废弃条款,已经在C++11中予以废弃,就是说,在C++03中,char *tem="szn";是合法的,但在C++11中是非法的,C++11必须这样写:const char * tem = "szn";

在C中,双引号括起来的字符序列不叫字符串常量,它仅仅是字符串字面量,C的字符串字面量并不属于常量,因为C的常量和常量表达式只能是编译期的。C++中的字符串字面量才能称为字符串常量。

C中的字符串字面量类型是char[N],数组到指针的转换结果为char*,而C++中的字符串常量类型是const char[N],数组到指针的转换结果是const char*。

tem[0] = 'm';试图修改字符串字面量,无论在C还是C++中都属于未定义行为,允许或不允许修改都没有违反标准。在你所使用的编译环境中,编译器把字符串字面量放到了执行环境中一个受保护的区域,从而产生运行期错误。
lin5161678 2016-05-03
  • 打赏
  • 举报
回复
引用
"szn"的类型应该是 const char* 吧
错了 C语言中 "szn"的类型应该是 char[4] 没有 const 也不是 char* C++中 不了解有没有const 但 "szn"依然是一个char[4] 不会是char*
ztenv 版主 2016-05-03
  • 打赏
  • 举报
回复
你的理解是对的

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧