const修饰的常量其实是可以修改的,但char* str = "..." 和宏定义的常量是不能修改的,因为他们被操作系统存放在常量空间被保护起来了,这和操作系统有关,操作系统的不同,他们存放的内存空间也不同。
例如可以这样修改const修饰的常量:
const char str1[] = "const char str[]";
char* str2 = (char*) str1;
str2[0] = 'A'; //OK
printf("addr=0x%08X,value=%s\n",str2,str2);
const int n = 1;
int* p = (int*) &n;
(*p)++; //OK
printf("addr=0x%08X value=%d\n",p,*p);
但这样的常量和宏定义不能被修改,因为他们被操作系统存放在常量空间被保护起来了。
const char* str3 = "const char*";
char* str4 = (char*)str3;
printf("addr=0x%08X,value=%s\n",str4,str4);
//str4[0] = 'A'; //这行c++会抛出异常 c会出错
CString不能直接强制转化为char* 但可以利用这种方法转换成char*来使用
CString strc1 = "CString";
const char* strc2 = (const char*)strc1;
char* strc3 = (char*) strc2;
strc3[0] = 'A';
printf("adds=0x%08X,value=%s\n",strc3,strc3);