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

2014-11-23 17:59:16 · 作者: · 浏览: 9

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

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

测试代码:

// memcpyTest.cpp : 定义控制台应用程序的入口点。   
//   
  
#include "stdafx.h"   
#include "string"   
  
using namespace  std;  
int _tmain(int argc, _TCHAR* argv[])  
{  
    string Str = "abcd";  
    char *pChar = "mmnddd";  
    //pChar[0]='j';                                     // 出现访问冲突异常   
  
    //char *pstr1 = Str.c_str();                        //类型异常   
    //const char *pstr1 = Str.c_str();    pstr1[0]='g'; //错误   
  
    char *pStr = const_cast(Str.c_str());        // 去掉const属性   
    pStr[0]='h';  
  
    char *pchar1 = const_cast(pChar);            // 去掉const属性   
    //pchar1[0]='e';                                    // 出现访问冲突异常,去不掉本身的const属性   
  
    //若想要去掉必须分配堆空间   
    char *pchar2 = new char[8];  
    //pchar2 = pChar;   
    //pchar2[0]= 'e';//这样也不行,只是指针指向了同一块内存区域,这块区域谁都不能动   
  
    memcpy(pchar2,pChar,sizeof(pchar2)*2);  
    pchar2[strlen(pChar)+1]='\0';  
    pchar2[0]='e';                                     //正确       
  
  
    return 0;