子函数返回值的有关问题
子函数返回值的问题?
#include "stdio.h "
#include "conio.h "
int *max(void)
{
int fu[6];
int x,y,z,t;
x=0;
y=0;
z=0;
t=0;
printf( "input x: ");
scanf( "%d ",&x);
printf( "input y: ");
scanf( "%d ",&y);
printf( "input z: ");
scanf( "%d ",&z);
if (x> y)
{t=x;x=y;y=t;} /*交换x,y的值*/
if(x> z)
{t=z;z=x;x=t;} /*交换x,z的值*/
if(y> z)
{t=y;y=z;z=t;} /*交换z,y的值*/
fu[0]=x;
fu[1]=y;
fu[2]=z;
return fu[2];
}
int main(void)
{
int *p=NULL;
p=max();
printf( "small to big:%u\n ",*p);
getch();
return 0;
};
为什么max 返回的值不正确呢? 我想返回3个值就是从小到大排序的数值,我定义了数组,哪不对吗?
------解决方案--------------------
你定义的数组fu[6]是局部变量,max()函数调用结束fu[6]会被自动释放。所以你在主函数中通过p得到max()的返回值是野指针。要返回正确值,可以通过将fu[6]设置为静态:static int fu[6];;也可以动态申请内存:int *fu = new int[6];,然后在主函数中释放:delete[] p;。
另外,你的max()函数返回的数据类型明显不正确。是否应该为:return &fu[2];?
#include "stdio.h "
#include "conio.h "
int *max(void)
{
int fu[6];
int x,y,z,t;
x=0;
y=0;
z=0;
t=0;
printf( "input x: ");
scanf( "%d ",&x);
printf( "input y: ");
scanf( "%d ",&y);
printf( "input z: ");
scanf( "%d ",&z);
if (x> y)
{t=x;x=y;y=t;} /*交换x,y的值*/
if(x> z)
{t=z;z=x;x=t;} /*交换x,z的值*/
if(y> z)
{t=y;y=z;z=t;} /*交换z,y的值*/
fu[0]=x;
fu[1]=y;
fu[2]=z;
return fu[2];
}
int main(void)
{
int *p=NULL;
p=max();
printf( "small to big:%u\n ",*p);
getch();
return 0;
};
为什么max 返回的值不正确呢? 我想返回3个值就是从小到大排序的数值,我定义了数组,哪不对吗?
------解决方案--------------------
你定义的数组fu[6]是局部变量,max()函数调用结束fu[6]会被自动释放。所以你在主函数中通过p得到max()的返回值是野指针。要返回正确值,可以通过将fu[6]设置为静态:static int fu[6];;也可以动态申请内存:int *fu = new int[6];,然后在主函数中释放:delete[] p;。
另外,你的max()函数返回的数据类型明显不正确。是否应该为:return &fu[2];?