2017-04-20 60 views
1

如果這聽起來像是一個家庭作業問題,那麼這是公平的,因爲這是一箇中期審查問題,通過爲本季度做更多準備工作。使用指針尋找最大的配對總數

作爲練習,我們鼓勵在數組中找到最大的元素總和並返回結果。爲了更好地弄清楚如何做到這一點,我在網上找到了這是在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加載這一功能和secondfindLargestSumPair(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); 

我如何使用指針錯誤在這種情況下使用該功能,而不是返回結果修改值?

+0

您顯然正確使用* third *參數,調用中第三個和第四個參數之間的區別是什麼?另外,請向我們展示一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve),其中包括*如何調用函數以及哪些值/參數。最後,你*確實*讀*錯誤信息?那麼這很難理解呢? –

+0

對不起,我有學習障礙,所以有時候我很難學習編程。謝謝你的鏈接 – cakebug

回答

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如預期

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); 

上述電話後,你會在變量second變量first和第二大的最大值。