2014-01-05 61 views
-1

這個程序應該算類似的條目數,使用指針,但 每當我在號碼類型,計數器總是等於零。我錯了什麼?遞增指針的值不起作用

#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; 
     } 
    } 
} 
+1

@Maroun Maroun我喜歡儘可能地使用指針。 – user3151918

+2

@ user3151918這是一個壞習慣。一個好的C/C++程序員將盡可能地減少指針的使用(例如使用引用)。它*非常*後。這也是爲什麼像Java和C#這樣的現代語言完全沒有指針的原因。 – Dai

+1

@ user3151918 - 爲什麼生活比需要變得更加困難。還可以按值傳遞數字(不需要傳遞指針,也可以使用常量)。也可以不用'continue' –

回答

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;並將其值返回給調用者。

+0

是的,你是對的,謝謝兄弟 – user3151918

+2

猜你'那麼他會接受他的回答,呃? ;) – GreenAsJade

+0

這實際上是否工作並更新'ptr_to_counter'指向的內存? –

0

*ptr_to_counter++

裝置

*(ptr_to_counter++)

這意味着通過增量躲藏ptr_to_counter的地址,這是把你的指針,其中沒有被存儲(或者可以是垃圾)相鄰的地址。

您應該使用(*ptr_to_counter)++意味着增量的值由ptr_to_counter指向。

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; 
} 
2

你在錯誤的地址ptr_to_counter遞增計數器值。 你必須使用* ptr_to_counter ++這意味着*(ptr_to_counter ++),即它是increamenting地址不是值。你應該使用(* ptr_to_counter)++。它會完美地工作。

1

如果你不能確定運算符優先級,請使用方括號,這也將提高代碼的可讀性。

* ptr_to_counter ++會像*(ptr_to_counter ++),因爲++具有更高的優先級。你應該使用(* ptr_to_counter)++