用指针的话要先new 出空间的

解决方案 »

  1.   

    第一种的内存是静态分配的,共占用7个字节;
    第二种的内存有两类,数组的内存在栈中,7个字节,常量字符的内存静态分配,6个字节。值得注意的是:数组元素szName[6]的值未知,应如下初始化:
    char szName[7] = {'M','a','r','i','n','a', 0};
      

  2.   

    char* szName="Marina";这种方式应该避免使用
    这种方式使得szName指向的内容不可更改,而且如果
    继续写一句szName="test";后,原来szName指向的内存没有释放
    char szName[7]={'M','a','r','i','n','a'};可以更改里面的内容
      

  3.   

    数组为常量指针,并且在编译时分配空间
    char a[100]="abcdsafasf";
    char *pa = "afbdsdfas";由于a为常量,所以 
    a = "asfasfdas";//出错
    而 
    pa = "asfas"; //正确
    pa = new char[100];//正确若定义
    char const* pca = "afasfasf";
    则他与
    char ac[]="afasfasf";
    用法一样;
    pca = new char[100];//错,此时pca只能指向固定的地址,不能指向别处
    pca[3] = 'a';//正确
    ac[3]  = 'a';//正确
      

  4.   

    第一种是一个字符串啊!szName[6]=='\0'
    第二种是字符,szName[6]未知,
    其实第一种等于static char string[]="Marina";char *szName=string;
    编译后,该语句不产生语句。但从程序开始运行到结束一直在内存里。在全局堆里。
    第二种则在程序每次运行到此的时候,对szName负值。该语句产生语句,
    但在该块结束时将被释放,在堆栈里。