鱼C论坛

 找回密码
 立即注册
查看: 938|回复: 3

[已解决]c语言指针函数输出问题

[复制链接]
发表于 2020-4-24 15:42:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
double *ping(double x[],int n)
{
    double q, p = 0, max = x[0], min = x[0];
    static double d[3] ;
    for (int i = 0; i < n; i++)
    {
        if (max < x[i]) max = x[i];
        if (min > x[i]) min = x[i];
        p = p + x[i];
    }
    q = p / n;
    d[0] = q;
    d[1] = max;
    d[2] = min;
    return d;
}

int main()
{
    double* ping(double x[], int n);
    double a[6] = { 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 16:18:44
不加static就是在栈上申请三个空间,存放三个值,ping函数调用结束,这三个空间都会被释放,再访问就是非法。加上static就是在全局区申请三个空间,这三个空间申请出来以后,在你程序运行期间始终存在,ping调用结束了也能在main中访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-24 15:58:28 | 显示全部楼层
d是局部变量,ping函数返回后,d就不存在了
用static可以让d一直存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 16:18:44 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
不加static就是在栈上申请三个空间,存放三个值,ping函数调用结束,这三个空间都会被释放,再访问就是非法。加上static就是在全局区申请三个空间,这三个空间申请出来以后,在你程序运行期间始终存在,ping调用结束了也能在main中访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 18:14:03 | 显示全部楼层
人造人 发表于 2020-4-24 15:58
d是局部变量,ping函数返回后,d就不存在了
用static可以让d一直存在

感谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 19:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表