c语言指针函数输出问题
#include<stdio.h>double *ping(double x[],int n)
{
double q, p = 0, max = x, min = x;
static double d ;
for (int i = 0; i < n; i++)
{
if (max < x) max = x;
if (min > x) min = x;
p = p + x;
}
q = p / n;
d = q;
d = max;
d = min;
return d;
}
int main()
{
double* ping(double x[], int n);
double a = { 99,100,100,98,95,90 }, b, c; double *d;
double p;
d = ping(a,6);
printf("平均值 最大值 最小值分别为:\n");
printf("max=%lf,min=%lf,pingjunzhi=%lf", *(d + 0), *(d + 1), *(d + 2));
}
输出值为 0 0 溢出
要么在函数ping的变量d前面加个static 要么删掉主函数printf("平均值 最大值 最小值分别为:\n");这一行才能正确输出
求解原因 d是局部变量,ping函数返回后,d就不存在了
用static可以让d一直存在
不加static就是在栈上申请三个空间,存放三个值,ping函数调用结束,这三个空间都会被释放,再访问就是非法。加上static就是在全局区申请三个空间,这三个空间申请出来以后,在你程序运行期间始终存在,ping调用结束了也能在main中访问 人造人 发表于 2020-4-24 15:58
d是局部变量,ping函数返回后,d就不存在了
用static可以让d一直存在
感谢解答
页:
[1]