gpt4 book ai didi

c - 在查找最大对和时使用指针

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:10 25 4
gpt4 key购买 nike

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

作为练习,我们被鼓励找到数组中元素的最大总和并返回该结果。为了更好地了解如何执行此操作,我在网上找到了一个使用 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);

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

最佳答案

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

您应该进行以下更改。下面的函数将返回最大的总和,并会为您提供最大和第二大的值。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com