如何在不使用struct的情况下在一个函数中返回两个值?

时间:2015-10-21 12:32:49

标签: c

        #include <stdio.h>
        #include <stdlib.h>


        double calculate(int ar[], int npts, int *gtr);


        int main()
        {

            int ar[4] = {1,2,3,0};
            double result;
            result = calculate(ar,4, &ar);
            printf("%lf ",result );         


            return 0;
        }


        double calculate(int ar[], int npts, int *gtr)
        {
            double total =0;
            int i = 0;

            double average;

            for(i=0; i<npts; i++)
            {
                total = total + ar[i];
            }

            average = total / npts;
            return average;

            for(i=0; i<npts; i++)
            {
                if(average < ar[i])
                {
                    *gtr++; 
                }
            }     

            return *gtr;
        }

当我调用函数计算时,我想返回平均值和* gtr值 但是,只有平均价值回报。 * gtr用于计算比arrary中的平均数字大多少的数字。

3 个答案:

答案 0 :(得分:1)

你使这个功能几乎正确,这是必须以不同方式完成的调用。

首先,不要从函数返回int gtr; result = calculate(ar,4, &gtr); printf("%lf %d\n",result, gtr); ;返回*gtr。最后,不要在中间。

然后,将呼叫更改为

{{1}}

确保在第二个循环之前将{{1}}设置为零,否则它将保持未初始化状态。

答案 1 :(得分:1)

根据我的理解,你想返回平均值,并以某种方式得到gtr的值。你可以返回平均值,并使用指针将gtr值保存到另一个变量。

machineDetail

答案 2 :(得分:0)

要返回两个值,您可以这样做:

    double calculate(int ar[], int npts, int *gtr)
    {
        double total =0;
        int i = 0;

        double average;

        for(i=0; i<npts; i++)
        {
            total = total + ar[i];
        }

        average = total / npts;
        return average;

        for(i=0; i<npts; i++)
        {
            if(average < ar[i])
            {
                *gtr++; 
            }
        }     

        return avergage;
    }

所以,返回avergage你有第一个变量,并使用gtr的puntator值你可以有这个值。