C

时间:2016-11-02 13:24:04

标签: c function pointers

我试图从函数中获取2个值。我已经搜索了问题,但我似乎自己搞乱了代码。

double* suurim(double arv[], int x, double *array)
{ 
    int i; 
    double temp; 
    temp = arv[0]; 
    for(i = 1; i < x; i++) // biggest 
    {
        if (arv[i] > temp)
        {
            array[0] = arv[i];
        }
    }
    for(i = 1; i < x; i++) // smallest
    {
        if (arv[i] < temp)
        {
            array[1] = arv[i];
        }
    }
    return array;
}

suurim(arv, mituArvu, array);
printf("%0.1lf\n", array[0]);

它没有返回它应该的东西。这里发生了什么?

有阵列Arv。该函数应该从数组Arv中获取最大和最小的数字,并将它们分别放入数组[0]和数组[1]。


编辑这可能是重复的,但其他问题答案包含我不想要的结构。

3 个答案:

答案 0 :(得分:1)

您的方法 是从函数返回多个值的有效方法。的

对于最大值,您只是返回具有大于第一个元素的最大索引的数组元素。 (temp一旦设置就不会改变)。这是一个算法失败:例如your_max(1,3,2,0)将返回2.

您实际上并不需要arv[i] > array[0]:您可以比较array[0],将arv[0]初始化为%assign ::DLL_LOADED = 0 %function Start() %if :: DLL_LOADED == 0 %% load DLL here %assign ::DLL_LOADED = 1 %endif

同样计算最小值。

答案 1 :(得分:1)

执行此操作的一种方法是创建结构:

{{1}}

只是一种方法。可以用指针进行优化。

答案 2 :(得分:0)

您的temp变量未正确更新。

至于返回一组参数:

您必须将指针作为对先前分配的对象的引用传递。您不必返回指针。调用函数时,将更新值。习惯上在参数之间传递数组大小。

void fun( double * ret_val, int size )
{
    int idx;
    for( idx = 0; idx < size; ++idx )
    {
       ret_val[idx] = idx;
    }
}

/* invocation: */

{
     double arr[] = { -.2, .3 };
     int size = sizeof( arr ) / sizeof( arr[0] );
     fun( arr, size );
}