2017-08-16 5 views
-3

これは私が行った作業です。ポインタローカル変数との関係

整数の配列と配列のサイズを受け入れ、以下を見つけるC++関数を書く: a。配列内の要素の合計 b。配列要素の平均値 c。配列内の最小値と最大値 メインプログラムで、動的メモリ割り当てを使用して10個の整数の配列を宣言し、前述の関数 を呼び出します。関数の出力をメインに表示します。 (出力値については、 参照による呼び出しを使用してください)。

私のコードザッツ
//USER DEFINED FUNCTION " func " 
void func(int arr[], int size, int *sum, int *avg, int *min, int *max) 
{ 
    *sum = 0; 
    *min = arr[0]; 
    *max = arr[0]; 
    *avg = 0; 

//calculations for sum 

    for (int i = 0; i < size; i++) 
    { 
     *sum = *sum + arr[i]; 
    } 

//calculations for avg 

    *avg = *sum/size; 

//calculations for minimum 

    for (int i = 0; i < size; i++) 
    { 
     if (*min > arr[i]) 
      *min = arr[i]; 
    } 

//calculations for maximum 

    for (int i = 0; i < size; i++) 
    { 
     if (*max < arr[i]) 
     { 
      *max = arr[i]; 
     } 
    } 
} 

void main() 

{ 
    int *arr; 
    int size; 
    cout << "enter size of array " << endl; 
    cin >> size; 
    arr = (int*) calloc(size, sizeof(int)); 
    for (int i = 0; i < size; i++) 
    { 
     cout << "enter element : " << endl; 
     cin >> arr[i]; 
    } 
    int sum, avg, min, max; 
    func(arr, size, &sum, &avg, &min, &max); 
    cout << "sum is : " << sum << "\n avg is : " << avg << endl; 
    cout << "minimum is : " << min << endl; 
    cout << "the maximum is : " << max << endl; 
    getch(); 
} 

、その作業罰金と私に望ましい結果を与えるが、「FUNC」ボディに、私は*分、* MAX、*平均を使用していますので、私は合格しているので、同様にこのための彼らのいずれかの代替であります私はポインタを使って値を参照するだけで値を渡し、 "* min"の代わりに "min"を使うことができます。私はポインタを介して値を渡す方法について提案したいが、ここでは "func"のようなユーザ定義関数の本体の中で逆参照演算子を使用しないでください。

+1

C++で 'calloc'を使用しないでください。 –

+2

[参考文献](https://www.tutorialspoint.com/cplusplus/cpp_references.htm)を参照してください。 –

+1

Ajayメイン関数でnew演算子とdelete演算子を使用しても、 "min"の代わりに "* min"を使用する必要があります。 –

答えて

1

referencesを使用して、必要なものを達成することができます。

だからあなたの関数の宣言は

func(int arr[], int size, int &sum, int &avg, int &min, int &max) 

そして、あなたがminとして直接変数を使用することができます内側、maxに変わり、avgなど

メインで、あなたは

として呼び出す必要があります
func(arr, size, sum, avg, min, max); 

最後に、ローカル変数を作成し、その中のすべての計算を行い、最後にそれらの計算を行います渡された参照の値を無視します(ほとんどの場合、これは少し最適化されている可能性があります)。

1

逆参照を減らすには、計算にローカル変数を使用し、完了したらパラメータに書き込みます。

例:

void sum(const std::vector<int>& numbers, int* result) 
{ 
    int total = 0; 
    for (auto i: numbers) 
    { 
     total += i; 
    } 
    *result = total; 
} 

これは、読みやすさに加えて、他の利点のカップルを持っています

  • 常に間接を通じて読み書きする必要はありませんので、それは高速です。 (参照はこの点でポインタと同じように悪いです。)
  • 何か例外が発生した場合、outパラメータは変更されません。
+0

molbdniloに感謝、私はそれを得た。@Ajayあなたはまた、ローカル変数を使ってすべての計算を行い、最終的にそれを* result = totalのようなパラメータに代入するこのことを私に言っていましたか? –

関連する問題