C 递增指针的值无效
这个程序应该使用指针来计算相似条目的数量,但是 每当我输入数字时,计数器总是等于零。我做错了什么C 递增指针的值无效,c,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
#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;
}
}
}
*ptr_至_计数器++;在递增指针本身时,将*ptr_写入计数器++;增加ptr_to_计数器的值
注意继续;这是多余的。你不必非得有别的东西。无论如何,循环都将被循环。您只需执行以下操作:
for(i = 0; i< 10 ; i++) {
if(array_func[i] == *number) {
(*ptr_to_counter)++;
}
}
我建议您尽可能减少指针的数量,例如,您不必逐个指针传递计数器。你只需要一个本地int计数器;并将其值返回给调用者。*ptr\u to\u计数器++
意味着
*ptr_至_计数器++
这意味着增加ptr_to_计数器所占用的地址,它将指针指向没有存储内容或可能是垃圾的相邻地址
您应该使用*ptr_to_counter+,意思是增加ptr_to_counter指向的值。我想您需要
*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;
}
您将地址ptr_处的计数器值错误地增加到计数器。
您必须使用*ptr_to_counter++,这意味着*ptr_to_counter++,即它是递增地址而不是值。您应该使用*ptr_to_counter++。它会很好地工作。如果您不确定运算符的优先级,请使用括号,这也会增加代码的可读性
*ptr_to_counter++将像*ptr_to_counter++一样工作,因为++具有更高的优先级。你应该使用*ptr_to_counter++@Maroun Maroun我喜欢尽可能多地使用指针。@user3151918这是个坏习惯。一个好的C/C++程序员将尽可能减少指针的使用,例如使用引用。安全多了。这也是为什么像Java和C这样的现代语言根本没有指针的原因。@user3151918-为什么让生活变得比需要的更困难。此外,按值传递数字不需要传递指向它的指针,还允许使用常量。此外,不需要continue可能函数的更好签名是int count\u similor\u entriesint*arr,size\u t len,int compare_to@Dai,什么是C/C++以及什么是好的C/C++程序员?案件正在审理中。这是一个只有C的问题,C没有引用。你在说什么?这是否真的起作用并更新ptr_to_计数器指向的内存?@EdHeal在写这篇文章时,并没有改变内存中的值,它只是将指针移动到指向下一个地址指针的位置。在他完成我告诉他的更改后,值将被更改,指针将不会更改。@marounnaroun-您的权利。我不得不重读一遍。我不认为这是函数You的意图。@EdHeal他想增加指针指向的值,这是真正多余的-他可以用一个本地计数器来代替。@user3151918如果答案真的对您有帮助,欢迎您接受: