找到最大对的总和时使用指针

时间:2017-04-20 04:32:13

标签: c arrays pointers

如果这听起来像是一个家庭作业问题那么公平,因为这是一个中期审查问题,需要为本季度做好更充分的准备。

作为练习,我们鼓励我们找到数组中最大的元素总和并返回该结果。为了更好地弄清楚如何做到这一点,我在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

但是,如果你想将变量中的第一和第二大数存储在变量之前,那么你必须加载这个函数,并在另外两个参数中进行修改。函数,例如firstsecondfindLargestSumPair(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);

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

3 个答案:

答案 0 :(得分:1)

无论我从你的问题中理解什么,除了最大的总和之外,你还想要检索数组中最大和第二大的数字。

您应该进行以下更改。下面的函数将返回最大的总和,并且还会给出最大和第二大的值。

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中的第二大值。

答案 1 :(得分:0)

您要做的是通过引用传递。有关详细说明和示例,请参阅链接。 Passing-arguments-by-reference

答案 2 :(得分:0)

这段代码可以帮助您: `

void setValue(int num, int *var)
{
    *var = num;
}
int main(int argc, char *argv[]) {
    int a = 0;
    setValue(2,&a);
    printf("%d",a);
    return 0;
}

` 它在我的电脑上运行正常,结果是预期的2