为什么这个能正常输出char * getcc()
{
char *b="yes";
return b;
}void main()
{
char *a=NULL;
a=getcc();
cout<<a<<endl;
}而下面的这个输出乱码?char * getcc()
{
char b[]="yes";
return b;
}void main()
{
char *a=NULL;
a=getcc();
cout<<a<<endl;
}求大神们指教!!!

解决方案 »

  1.   

    char *p = "aaaa";相当于常量,分配是在常量区,
    而 char b[]="yes";是数组,栈上分配的,用完会回收,看看数组和指针的区别吧
      

  2.   

    第一个存在代码段~ 程序运行过程中都不会更改这个区域,
    也就是说char *b="yes";这个b所指向地址上的"yes"值不改变第二个存在栈段~ 是一个临时对象 getcc()返回之后~不保证它不被更改
      

  3.   

    第一个返回的是字符串常量"yes"的地址,由于常量分配是在常量区,不会在函数返回后销毁,所以能正确显示;
    第二个是创建一个变量名为b的字符串临时变量,并将其值初始化为“yes”,由于临时变量是在栈上分配,返回后变量所分配的内存就被释放了,这个再显示这个地址的值就不正确了
      

  4.   

    还是不太明白,下面的这个为什么能正常输出?
    int * getcc()
    {
    int b[5]={0,10,3,4,2};
    return b;
    }void main()
    {
    int *a=NULL;
    a=getcc();
    cout<<*a<<endl;
    }
      

  5.   

    char b[]="yes";
    这个不是分配具体空间吗?
      

  6.   

    http://hi.baidu.com/abowan/blog/item/05ca8318182b3db04bedbc4e.html
      

  7.   

    int b[5]={0,10,3,4,2};
    这个时候b[5]退化成b*.你函数返回了地址是可以输出的。
    int b[]={};会动态分配地址,可是由于是局部变量的原因。返回的地址可能就是个错误的值了