string和char*的区别以及const_cast<>()

首先,string是类,char*属于基本数据类型

其次,const_cast只能改变指针的const属性,而不能改变或者去掉本身的const属性

测试代码:

 

[cpp][/cpp] view plaincopyprint?

  1. // memcpyTest.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include “stdafx.h”
  4. #include “string”
  5. using namespace  std;
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8.     string Str = “abcd”;
  9.     char *pChar = “mmnddd”;
  10.     //pChar[0]=’j’;                                     // 出现访问冲突异常
  11.     //char *pstr1 = Str.c_str();                        //类型异常
  12.     //const char *pstr1 = Str.c_str();    pstr1[0]=’g’; //错误
  13.     char *pStr = const_cast<char*>(Str.c_str());        // 去掉const属性
  14.     pStr[0]=’h’;
  15.     char *pchar1 = const_cast<char*>(pChar);            // 去掉const属性
  16.     //pchar1[0]=’e’;                                    // 出现访问冲突异常,去不掉本身的const属性
  17.     //若想要去掉必须分配堆空间
  18.     char *pchar2 = new char[8];
  19.     //pchar2 = pChar;
  20.     //pchar2[0]= ‘e’;//这样也不行,只是指针指向了同一块内存区域,这块区域谁都不能动
  21.     memcpy(pchar2,pChar,sizeof(pchar2)*2);
  22.     pchar2[strlen(pChar)+1]=’\0′;
  23.     pchar2[0]=’e’;                                     //正确
  24.     return 0;
  25. }

标签