C通过引用传递

Sha*_*ars 0 c pointers increment pass-by-reference

在我的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;
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

更改

    *numComparisons++;
Run Code Online (Sandbox Code Playgroud)

    (*numComparisons)++;
Run Code Online (Sandbox Code Playgroud)

Postfix增量的优先级高于解除引用运算符,因此您的代码会增加指针而不是递增指向的值.