该程序应该使用指针来计算类似条目的数量,但是 每当我输入数字时,计数器总是等于零。我出了什么问题?
#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;
}
}
}
答案 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
指向的值。