起因是我看别人代码发现了那么一段程序,就是诸如
char *p ="abcde";
这样的我之前是从来没这样初始化过的,所以还以为get到了新方法,后来一想不对。。。”abcde”应在常量储存区,这个区的地址居然也能直接赋值?于是做了 如下探究
首先先看,p是否真的在常量储存区
char *p = "Hello";
char *q = "Hello";
cout << (void *)p << " " << (void *)q << endl;
//注意这个地方一定要加(void *)因为如果不加,cout会直接输出q的字符串内容
q = "asdfsdafsadf";
结果发现输出:01029B30 01029B30
两个一样的地址,说明都是常量储存区中”Hello”的地址
但是为什么常量储存区的地址可以直接赋给一个非常量指针呢,我尝试修改了一下p中的内容
*p =