c++ 疑问

来源:百度知道 编辑:UC知道 时间:2024/06/15 07:56:50
#include<iostream>
using namespace std;
double *shuzu()
{double p[10];
for(int i=0;i<4;i++)
{
cin>>p[i];
}
return p;
}
void main()
{ double *p;
p=shuzu();

{
cout<<*p<<endl;
cout<<*(p+1)<<endl;
cout<<*(p+2)<<endl;
cout<<*(p+3)<<endl;

}
}
主函数中输出的四个数中,每个只有其中的一个输出正确,
虽然shuzu函数返回的是p的首地址,但如果屏蔽调其它的三个,*(p+3)也能正确输出,望指点

你是在函数内定义的数组,其作用域在函数内,函数调用完,数组内容也就释放掉了。返回的p是一个double型的指针,也就是你定义的数组首指针,它里面的内容自然还保存着。而后面的p+n只不过是p后第n个指向double型的内存,存储的数据都已经在函数调用后被释放了,里面的数是随机的。

首先,语法规定的确实如一楼所说。

我也调试了一下,发现四句不管要哪几句,只有第一句,就是先执行的那句返回的“正常”(就是跟在函数中赋的值一样),后面的就都是随机的了。不过,至于为什么会这样,就不知道了。但是,你记住不要使用这样的函数就行了。