如果这听起来像是一个家庭作业问题,那么这是公平的,因为这是一个期中复习问题,需要努力完成,以便为本季度做好更多准备。
作为练习,我们鼓励在数组中找到元素的最大和并返回结果。为了更好地了解如何做到这一点,我在Web上找到了一个C++中的代码示例,而不是C。

int findLargestSumPair(int arr[], int n)
{
    int first, second;
    if (arr[0] > arr[1])
    {
        first = arr[0];
        second = arr[1];
    }

    else
    {
        first = arr[1];
        second = arr[0];
    }

    //traverse remaining array and find first and second largest elements

    for (int i = 2; i<n; i++)
    {
        if (arr[i] > first)
        {
            second = first;
            first = arr[i];
        }
        else if (arr[i] > second && arr[i] != first)
            second = arr[i];
    }
    return (first + second);
}

所以,如果你用类似的方法调用函数,
int largestSum = findLargestSumPair(numberarray, numberarraylength);

…然后应该将值存储在largestSum中。
但是,如果您想在将第一个和第二个最大的数字相加之前将它们存储在变量中,那么您必须用另外两个要在函数中修改的参数加载此函数,例如firstsecond通过findLargestSumPair(int arr[], int n, int *first, int *second)传递,然后在最后不返回任何内容,因为通过使用指针,它们会被函数更改本身。
我是否在正确的轨道上认为int *firstint *second是正确的语法,它们应该是函数定义中的指针?因为我已经尝试过做出这种改变,但我犯了如下错误:
largestsum.c:3:6:note: expected 'int *' but argument is of type 'int'
void findLargestSumPair(int arr[], int n, int *first, int *second)

warning: passing argument 4 of findLargestSumPair makes pointer from integer without a cast: findLargestSumPair(numbers, 9, largest, next_largest);

在这种情况下,如何不正确地使用指针来使用函数而不是返回结果来修改值?

最佳答案

不管我从你的问题中了解到什么,除了最大的和,你还需要检索数组中最大的和第二大的数。
您应该做以下更改。下面的函数将返回最大的和,并为您提供最大值和第二大值。

void findLargestSumPair(int arr[], int n, int *largest, int *second_largest)
{
    ...
    ... // The same code what you have used above with below modication

    *largest = first;
    *second_largest = second;
    return (first + second);
}

按如下方式调用函数:
int first, second;
lagest_sum = findLargestSumPair(arr, arr_len, &first, &second);

在上述调用之后,您将在变量first中获得最大值,在变量second中获得第二大值。

关于c - 查找最大对数时使用指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43510246/

10-17 00:24