通过引用传递时查找数组的最小值

Finding the Minimum of Array while passing by reference

我正在尝试使用 pass by reference 编写一个 void Function ,它找到一个数组的最小值,同时只给出一个指针数组的长度和数组的长度作为函数的参数。

我不断收到如下错误:

Incomplete type is not allowed (in the main function) assignment to 'int *' from 'int' makes pointer from integer without a cast.

这是我的代码:

void minimum(int *iArray[], int count)
{

    int min = iArray[0];
    for(int i = 1; i < count; i++)
    {
        if (min > iArray[i])

        *iArray = min;

    }

}


int main()
{
    int numbers[] = {4, 6, 9, 5};

    printf("%d", minimum(numbers, 4));

    return 0;
}

你能帮我看看我怎样才能做得更好吗?

函数的声明和定义不正确。

在这个函数调用中

minimum(numbers, 4)

数组被隐式转换为指向类型 int * 的第一个元素的指针。但是对应的函数参数的类型int *[]被编译器调整为int **..

类型

例如这一行

int min = iArray[0];

int 类型的对象 minint * 类型的指针初始化。

此外,在找到最小元素的函数中更改源数组也是一个坏主意。

并且由于函数具有 return 类型 void 那么函数 printf 的调用是无效的

printf("%d", minimum(numbers, 4));

该函数应按以下方式声明和定义

int * minimum( const int *a, size_t n )
{
    const int *min = a;

    for ( size_t i = 1; i < n; i++ )
    {
        if ( a[i] < *min ) min = a + i;
    }

    return ( int * )min;
}

并且函数的调用看起来像

int *min = minimum(numbers, 4);

printf( "The minimum value is %d at position %tu.\n", *min, min - numbers );

或者,函数可以按以下方式声明和定义

size_t minimum( const int *a, size_t n )
{
    size_t min = a;

    for ( size_t i = 1; i < n; i++ )
    {
        if ( a[i] < a[min] ) min = i;
    }

    return min;
}

并且函数的调用看起来像

size_t min = minimum(numbers, 4);

printf( "The minimum value is %d at position %zu.\n", numbers[min], min );

numbers 是指向数组第一个元素的指针。因此你的函数定义应该是这样的:-

int minimum(int *iArray, int count)

int minimum(int iArray[], int count)

注意:您寻找最小值的逻辑有一些错误,您应该 return min 以便用 printf 打印它。您的完整代码将如下所示:-

#include <stdio.h>

int minimum(int *iArray, int count)
{

    int min = iArray[0];
    for(int i = 1; i < count; i++)
    {
        if (min > iArray[i])
            min = iArray[i];

    }
    return min;
}


int main()
{
    int numbers[] = {4, 6, 9, 5};

    printf("%d", minimum(numbers, 4));

    return 0;
}