2017-12-17 16 views
1

私は以下の3つの関数を持っていますが、なぜ2番目と3番目の警告が* arrで警告されているのですか?警告は何を意味し、どのようにこれを修正するのですか?C++警告: "ポインタパラメータ" arr "constへのポインタ"

IDE:Clion 2017.3にMinGW64 5.0、CMakeの3.9.4

ありがとうございました。

int getFirstEven(int n, int *arr) { 
    for (int i = 0; i < n; ++i) { 
     if (arr[i] % 2 == 0) 
      return arr[i]; 
    } 
    return -1; 
} 

int getLastOdd(int n, int *arr) { 
    int lastOdd = -1; 
    for (int i = 0; i < n; ++i) { 
     if (arr[i] % 2 != 0) 
      lastOdd = arr[i]; 
    } 
    return lastOdd; 
} 

int countElement(int n, int *arr, int e) { 
    int cnt = 0; 
    for (int i = 0; i < n; i++) { 
     if (arr[i] == e) 
      cnt++; 
    } 
    return cnt; 
} 

enter image description here

+1

arrに奇数値がある場合、getFirstEven()は何を返しますか? –

+0

これは私がここにいるエラーではありません:https://ideone.com/HhK87h –

+0

無関係:あなたの配列に偶数が含まれていれば奇妙なことがあなたを噛んでくれることを願っています。 – John3136

答えて

4

ことが可能不変どこを優先するようにしてconstで不変のものを示すために理にかなっています。

警告は、関数がarrが指すデータを変更しないため、関数がconstパラメータへのポインタでよりよく宣言できることを意味します。そのようなもの:

int getFirstEven(int n, int const* arr) { 
    for (int i = 0; i < n; ++i) { 
     if (arr[i] % 2 == 0) 
      return arr[i]; 
    } 
    return -1; 
} 
+0

ありがとうございました。したがって、渡されたポインタが指すデータを変更しない関数では、ポインタの前に "const"を宣言する必要があります。私がこれをしなければ、これは問題を引き起こすのでしょうか? –

+1

constは利益をもたらし、警告はあなたがそれらを逃すかもしれないということです。 constを使用すると、constへのポインタとconstデータへの両方のポインタを渡すことができます。constには、データを変更しないことを意図したドキュメントもあります。 –

+0

私はあなたの答えに同意しますが、他の機能がなぜ警告を発しないのか説明していません。 'arr'は他の関数でもあまり使われていません。それはなぜでしょうか? –

関連する問題