如果这听起来像是一个家庭作业问题那么公平,因为这是一个中期审查问题,需要为本季度做好更充分的准备。
作为练习,我们鼓励我们找到数组中最大的元素总和并返回该结果。为了更好地弄清楚如何做到这一点,我在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
。
但是,如果你想将变量中的第一和第二大数存储在变量之前,那么你必须加载这个函数,并在另外两个参数中进行修改。函数,例如first
和second
由findLargestSumPair(int arr[], int n, int *first, int *second)
传递,然后在最后没有返回任何内容,因为通过使用指针它们会被函数本身更改。
我是否在正确的轨道上int *first
和int *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);
在这种情况下,如何使用指针错误地使用函数修改值而不是返回结果?
答案 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