为什么这个能正常输出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;
}求大神们指教!!!
{
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;
}求大神们指教!!!
而 char b[]="yes";是数组,栈上分配的,用完会回收,看看数组和指针的区别吧
也就是说char *b="yes";这个b所指向地址上的"yes"值不改变第二个存在栈段~ 是一个临时对象 getcc()返回之后~不保证它不被更改
第二个是创建一个变量名为b的字符串临时变量,并将其值初始化为“yes”,由于临时变量是在栈上分配,返回后变量所分配的内存就被释放了,这个再显示这个地址的值就不正确了
int * getcc()
{
int b[5]={0,10,3,4,2};
return b;
}void main()
{
int *a=NULL;
a=getcc();
cout<<*a<<endl;
}
这个不是分配具体空间吗?
这个时候b[5]退化成b*.你函数返回了地址是可以输出的。
int b[]={};会动态分配地址,可是由于是局部变量的原因。返回的地址可能就是个错误的值了