Monory小乐 发表于 2020-4-24 15:42:32

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");这一行才能正确输出
求解原因

人造人 发表于 2020-4-24 15:58:28

d是局部变量,ping函数返回后,d就不存在了
用static可以让d一直存在

倒戈卸甲 发表于 2020-4-24 16:18:44

不加static就是在栈上申请三个空间,存放三个值,ping函数调用结束,这三个空间都会被释放,再访问就是非法。加上static就是在全局区申请三个空间,这三个空间申请出来以后,在你程序运行期间始终存在,ping调用结束了也能在main中访问

Monory小乐 发表于 2020-4-25 18:14:03

人造人 发表于 2020-4-24 15:58
d是局部变量,ping函数返回后,d就不存在了
用static可以让d一直存在

感谢解答
页: [1]
查看完整版本: c语言指针函数输出问题