1

私のlSearch関数(線形検索)では、*numComparisonsという名前の変数を参照で渡そうとしています。

比較が行われるたびに増分する必要がありますが、何らかの理由でこれを行っていません。なぜだめですか?mainの最後に移動すると、関数は機能しますが(比較が見つかるか、比較が見つからない場合は-1が返されます)、numComparisons値は毎回0に出力されます。

int lSearch(int arr[], int size, int target, int *numComparisons)
{
    int counter;

    for(counter = 0; counter < size; counter++)
    {  
        *numComparisons++;

        if(arr[counter] == target)
           return(*numComparisons);
    }
    return(-1);
}


int main(int argc, char * argv[])
{
   int enterNumbers[1000], copy[1000], counter;
   int numComparisons = 0, target = 26;

   printf("Enter in numbers and press -999 when you are done: ");

   for(counter = 0;; counter++)
   {
      scanf("%d", &enterNumbers[counter]);

      if(enterNumbers[counter] == -999)
          break;  
   }

   arrayCopy(enterNumbers, copy, counter);
   sort(copy, counter);

   if(lSearch(copy, counter, target, &numComparisons) >=0)
   {
      printf("Target number found in linear search.\n");
      printf("Number of comparisons: %d\n", numComparisons);
   }
   else
   {
      printf("Target number was not found in the linear search\n");
      printf("Number of comparisons: %d\n", numComparisons);
   }
   return 0;
4

3 に答える 3

6

変化する

    *numComparisons++;

    (*numComparisons)++;

接尾辞のインクリメントは間接参照演算子よりも優先順位が高いため、コードはポイントされた値をインクリメントするのではなく、ポインターをインクリメントします。

于 2013-01-26T15:22:54.797 に答える
1
*numComparisons++;

そのポインタではインクリメントせずint、ポインタ自体をインクリメントします。

適切な括弧を追加する必要があります。

(*numComparisons)++
于 2013-01-26T15:23:12.287 に答える
0

*numComparisons++最初にポインターが 4 ずつインクリメントされることを意味します (配列を
使用(*numcomparisons)++しているときに役立ちます)intnumcomparisons

于 2013-01-26T15:30:32.117 に答える