#include<iostream>
using namespace std;
int main()
{
const char*ch0="ch";
const char*ch1="ch";
const char*ch2="chchchc";
cout<<(int*)ch0<<endl;
cout<<(int*)ch1<<endl;
cout<<(int*)ch2<<endl;
return 0;
}
为什么输出的第一个结果和第二个是一样的,而第三个是不一样的?
char*存放的是什么的地址?
------解决方案--------------------
char *指向的是字符串的首地址
后面的都是常量字符串,第一个跟第二个字符串是相同的,如果编译器做优化,那么就只有一个,首地址是相同的,也就是楼主看到的结果,前两个打印出来的是相同的
如果编译器不做优化,每个常量字符串都放一个位置,那打印出来就不相同了。
------解决方案--------------------
需要理解一下c/c++编译器分配内存,ch1和ch2都是放在字符常量区,再次定义字符串常量的时候会在这个区里查看,是否已经被定义过了,如果已经定义过了,就返回之前定义的字符串地址,否则重新分配内存。
PS:字符串常量不能修改,之前犯过这样的错,,,