C++ rtmp livestream 流媒体

海阔天空 张翼飞翔

我的学习笔记。--我喜欢这里,因为这里安静,无广告骚扰。
随笔 - 82, 文章 - 2, 评论 - 126, 引用 - 0
数据加载中……

const常量的修改问题


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);

posted on 2008-09-18 12:06 ZhangEF 阅读(160) 评论(0)  编辑  收藏 所属分类: C/C++