关于C++的一道题

char*p="IAMASTUDENT";
p[3]=0;
std::cout<
应该是运行时会报错,为什么呢,c++小白求教
慕斯王
浏览 373回答 2
2回答

婷婷同学_

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

相关分类

JavaScript