天下3毒浪滔天怎么合:在VC里,如何让涵数返回数组?请高手指点

来源:百度文库 编辑:高考问答 时间:2024/05/03 03:39:09
是返回数组,不是返回数组的首地址。
能否写个简短的示例,谢谢!
为什么返回来的数据不对,如何才能得出正确的数据
char* SendStr()
{
char pstr[]={'a','b',0,0,0,0};
pstr[0]='t';
pstr[1]='r';
pstr[2]='g';
pstr[3]='i';
cout<<strlen(pstr)<<endl;

return pstr;
}

int main(int argc, char* argv[])
{
char *buff=SendStr();
cout<<buff<<endl;
return 0;
}

楼上两位朋友说的没错。再给楼主说的明白些吧:
-------------------------------------------
你的Buff是SendStr函数的局部变量,根据变量的生命周期,在SendStr调用完毕后,Buff就已经被系统自动释放了。
这时,虽然你的P指向了Buff,但由于Buff在离开SendStr时,已经不存在了,那么,当你在调用函数中使用返回的P时,当然是访问不到数组的。
那么为什么,有的时候,可以返回对象呢?那是因为,动态创建的对象,在返回时,自动调用了拷贝函数,将return object 的对象拷贝给了调用函数中的临时对象,并由临时对象进行赋值。
所以从表面上看来,好像是由局部函数中的对象直接赋值给了调用函数。
---------------------------------------------------------
时间长了,我也记不是很清楚了!
有关概念可以去查查C++中关于拷贝函数的相关内容!

返回数组的首地址不就是返回数组吗,硬要返回数组
int [] GetArray()
{
return Array;
}

必须保证Array是在堆上的数组,否则会造成返回值不正确

返回数组的首地址,在函数外面就可以通过此地址遍历整个数组了
int * GetArray()
{
//为Array动态申请空间,也就是保证Array是在堆上的
//数组,否则函数结束后空间会被收回
return Array;
}