为了账号安全,请及时绑定邮箱和手机立即绑定

关于C++的一道题

关于C++的一道题

慕斯王 2019-03-29 22:09:33
char*p="IAMASTUDENT";p[3]=0;std::cout
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

在回答之前,先给楼主提个意见:既然是C++问题,那就应该尽量使用STL,如string,vector。
首先要知道C++使用四种不同的方案来存储数据(它们的区别在于数据保留在内存中的时间):
自动存储:在函数定义中声明的变量(包括函数参数)为自动存储的。
静态存储:在函数定义外定义的变量和使用关键字static定义的变量为静态存储的。
线程存储(C++11)
动态存储:运行时用new运算符分配的内存,一直存在,直到delete运算符将其释放或程序结束为止,有时也被称为自由存储或堆。
定义指针char*p="IAMASTUDENT"时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,除非在定义时同时赋给指针一个字符串常量进行初始化。这里的字符串常量是静态存储的,而且被定义为只读。如果试图通过指针修改这个字符串常量的值,程序就会出现undefinedbehavior。所以,这里初始化指针时最好用const标记该指针指向的字符串为常量。
另外一个需要注意的是,定义数组charp[]="IAMASTUDENT"时,数组p的内容是自动存储的。
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 372 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信