Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 递增指针的值无效_C - Fatal编程技术网

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如果答案真的对您有帮助,欢迎您接受: