「finder」の引数2を渡す警告は、キャストなしで整数からポインタを作成します

2015-10-29 c compiler-errors

ユーザーが入力した変数「find」をこの関数に渡して、ユーザーが入力した数値(既存の配列内)の添え字の位置を返そうとしています。私はこれについて他のいくつかの投稿を見ましたが、何が説明されているのか本当に理解できませんでした。すみません、初心者です。

完全ではありませんが、よくわからないいくつかのエラーのためにコンパイルできません。

  1. 「finder」の引数2を渡す警告は、キャストせずに整数からポインタを作成します。そのポイント:

num_loc = finder(find, sort_num[10]);

ここでは、関数の「where」の戻り値に「num_loc」を設定しています num_loc = finder(find, sort_num[10]); printf( "\nYour number is located in memory location %d of the array",num_loc ); num_loc = finder(find, sort_num[10]); printf( "\nYour number is located in memory location %d of the array",num_loc );

  1. 「[注]関数のプロトタイプを指している「int *」が必要ですが、引数は「int」型です」

    //fprototype outside the main at the beginning of the file int finder(int f,int x[]); //fprototype outside the main at the beginning of the file int finder(int f,int x[]);

これが私の機能です:

//function located at the end of the file outside the main
int finder(int f, int x[])
{
    int found = 0;
    int where;
    int i = 0;

    while (found != 1){
        if (x[i] == f){
            found = 1;
            where = i;
            return where;
        }
        else{
            ++i;
        }
    }
}

Answers

num_loc = finder(find, sort_num[10]);

に相当

int num = sort_num[10];       // Problem. Accessing array out of bounds.
num_loc = finder(find, num);  // Problem. Using an `int` when an `int*` is expected.
                              // That's what the compiler is complaining about.

finderの呼び出しでsort_numだけを使用する必要があります。

num_loc = finder(find, sort_num);

実際の解決策は、 sort_numの要素数を示す別の引数を受け入れるようにfinderを変更することsort_num 。そうしないと、範囲外の配列にアクセスする危険があります。また、かなり単純化することもできます。

int finder(int f, int x[], int arraySize)
{
   for ( int i = 0; i < arraySize; ++i )
   {
      if (x[i] == f)
      {
         return i;
      }
   }

   // Not found
   return -1;
}

そしてそれを次のように呼び出します:

num_loc = finder(find, sort_num, 10);

これは関数定義の最初の部分です:

int finder(int f, int x[])

2番目の引数はintポインターで、コンパイラーは次のように言っています。

expected 'int *'

あなたはこれであなたの関数を呼び出しました:

num_loc = finder(find, sort_num[10]);

sort_numが整数配列の場合、sort_num [10]はその配列の11番目の位置の整数に評価されます。つまり、ファインダー関数を、intポインターではなく、その整数に渡します。 sort_numが整数配列の場合、呼び出しを次のように書き換えます。

num_loc = finder(find, sort_num);

このようにして、sort_num配列の最初の要素のアドレスを保持するintポインターを渡します。

Related