これは宿題のように聞こえる場合は、これは中期のレビュー質問であるため、四半期に備えて準備を進めています。最大のペアを見つけたときのポインタを使用
練習として、配列内の要素の最大合計を見つけてその結果を返すことをおすすめします。より良いこれを行う方法を見つけ出すために、私はそれが機能するためにこのように書きむしろ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
としての機能に変更される2つの以上のパラメータ、この関数をロードする必要があると思います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);
どのように機能を使用してではなく、結果を返すの値を変更するには、この場合には、誤ってポインタを使用していますか?
* 3番目の引数を正しく使用しているようですが、呼び出しの3番目と4番目の引数の違いは何ですか?また、関数をどのように呼び出すか、どのような値/引数を含んでいるかなど、[最小限で完全で検証可能な例](http://stackoverflow.com/help/mcve)を表示してください。最後に、あなたは*実際に*エラーメッセージを*読みましたか?理解できないのはどうでしょうか? –
申し訳ありませんが、私は学習障害がありますので、時々私のために行き、プログラミングを学ぶのが難しいです。リンクありがとう – cakebug