我试图从函数中获取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]。
编辑这可能是重复的,但其他问题答案包含我不想要的结构。
答案 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 );
}