增加指针的值不起作用

时间:2014-01-05 07:28:36

标签: c

该程序应该使用指针来计算类似条目的数量,但是 每当我输入数字时,计数器总是等于零。我出了什么问题?

#include <stdio.h>
#include <stdlib.h>

//using function to count similar enteries in an array...
void count_similar_enteries(int array_func[10],int *number, int *ptr_to_counter);

int main()
{
    int number = 0;
    int array[10] = {0,1,1,2,3,1,2,67,65,1};
    int counter = 0;
    printf("enter a number\n");
    scanf("%d", &number);
    count_similar_enteries(array, &number,&counter);
    printf("the number of similar enteries are %d\n", counter);
    return 0;
}

void count_similar_enteries(int array_func[10],int *number, int *ptr_to_counter)
{
    int i;
    for (i = 0; i< 10 ; i++)
    {
        if(array_func[i] == *number)
        {
            *ptr_to_counter++;
            continue;
        }
        else
        {
            continue;
        }
    }   
}

5 个答案:

答案 0 :(得分:7)

*ptr_to_counter++;正在递增指针本身,写(*ptr_to_counter)++;以递增ptr_to_counter

请注意continue;是多余的。您不必拥有if-else。无论如何,循环将“循环”。你可以这样做:

for(i = 0; i< 10 ; i++) {
   if(array_func[i] == *number) {
      (*ptr_to_counter)++;
   }
}

我建议你尽可能多地减少指针的数量,例如,你不必通过指针传递计数器。您可以拥有本地int counter;并将其值返回给调用者。

答案 1 :(得分:2)

您在地址ptr_to_counter处错误地递增计数器值。 您使用* ptr_to_counter ++表示*(ptr_to_counter ++),即它增加地址而不是值。你应该使用(* ptr_to_counter)++。它会完美地运作。

答案 2 :(得分:1)

我认为你需要

*ptr_to_counter = *ptr_to_counter + 1;

修改

也许这将是一个更好的实施

int count_similar_enteries(int arr, size_t len,int number)
{ 
    i;
    int count = 0;
    for (size_t i = 0; i<len ; ++i)
    {
        if(arr[i] == number)
        {
            ++count;
        }
    }
    return count;
}

答案 3 :(得分:1)

如果您不确定运算符优先级,请使用括号,这也将提高代码的可读性。

* ptr_to_counter ++将像*(ptr_to_counter ++)一样工作,因为++具有更高的优先级。你应该使用(* ptr_to_counter)++

答案 4 :(得分:0)

*ptr_to_counter++

装置

*(ptr_to_counter++)

这意味着增加ptr_to_counter的地址,这是指针指向没有存储任何内容的相邻地址(或者可能是垃圾)。

您应该使用(*ptr_to_counter)++意味着增加ptr_to_counter指向的值。