2013-03-01 123 views
4

我找不到我的問題。一直給我這些錯誤:傳遞參數使整數指針爲

"c:2:5: note: expected 'int *' but argument is of type 'int'" 
"c:28:1: warning: passing argument 1 of 'CountEvenNumbers' makes pointer from 
    integer without a cast [enabled by default]" 

下面是代碼:

1 #include <stdio.h> 
2 int CountEvenNumbers(int numbers[], int length); 
3 int main(void) 
4 { 
5 int length; 
6 int X;int Z; int Y; int W; 
7 X=0;Y=0;Z=0;W=0; 
8 printf("Enter list length\n"); 
9 scanf("%d",&length); 
10 int numbers[length]; 
11 
12 if (length<=0) 
13 . {printf("sorry too low of a value\n"); 
14 . . return 0;} 
15 else 
16 . { 
17 . printf("Now, enter %d integers\n",length); 
18 . for (X=0;X<length;X++) 
19 . . {scanf("%d",&Y);//X is position in array, Y is value. 
20 . . numbers[X]=Y; 
21 . . } 
22 . printf("The list reads in as follows:\n"); 
23 . for (W=0;W<length;W++) 
24 . . {Z=numbers[W]; 
25 . . printf("%d ",Z);} 
26 . printf("\n"); 
27 . } 
28 CountEvenNumbers(numbers[length] , length); 
29 return 0; 
30 } 
31 
32 int CountEvenNumbers(int numbers[], int length) 
33 { 
34 . int odd_count;int even_count;int P;int Q; 
35 . Q=0; odd_count=0;even_count=0; 
36 . for (P=0;P<length;P++) 
37 . . if (numbers[Q]==0) 
38 . . . {even_count++; 
39 . . . Q++;} 
40 . . else if ((numbers[Q]%2)!=0) 
41 . . . {odd_count++; 
42 . . . Q++;} 
43 . . else 
44 . . . {even_count++; 
45 . . . Q++;} 
46 . printf("There are %d even numbers in the series\n",even_count); 
47 . return 0; 
48 } 
+4

在您的代碼中包含行號的榮譽! – 2013-03-01 16:55:50

回答

1

閱讀一個C教程,真的。 array[index]下標/索引數組,因此它在數組中產生index th元素。

CountEvenNumbers(numbers, length); 
3

在第28行,你想傳遞的整數:如果您想通過陣列要對自己(當然,而是一個指向它的第一個元素),然後簡單地寫它的名稱操作數字的索引「長度」。您應該只是通過數字本身,所以像CountEvenNumbers(numbers, length);

9

的回答你的問題是交換這樣的:

CountEvenNumbers(numbers[length], length); 

CountEvenNumbers(numbers, length); 

但是,如果你繼續編碼,一你可能發現無價的技能是破譯warrning /錯誤信息:

「c:2:5:note:expecte d '詮釋*',但參數的類型 'INT'」
「C的:28:1:警告:傳遞 'CountEvenNumbers' 的參數1使得從 整數指針,未作施放[默認啓用]」

那麼這是什麼意思?它指出,在第28行(CountEvenNumbers(numbers[length] , length); ),它期望你進行參數1的轉換,這意味着你通過了它沒有想到的東西。所以你知道第一個參數有什麼問題。

這裏的訣竅是另一行:expected 'int *' but argument is of type 'int'它的意思是「我想要一個指向整數的指針,但你給了我一個整數」。這就是你知道你傳遞錯誤類型的方式。

所以你應該問自己的是什麼類型是論點1?你知道如果你想訪問數組中的一個元素,你需要使用[]的(你在代碼的第20行和第25行),所以通過將numbers[length]傳遞給你的函數,你試圖通過它元素而不是像它期望的完整陣列。

這個的另一半是expected 'int *',你的函數爲什麼會期望得到一個指向int的指針?那麼這是因爲在C中,當你將(鍵入)數組decays傳遞給(type)的指針時。

當然號碼[長度]的1是不是真的在元件您的陣列,無論如何,它溢出它。

+0

謝謝!我知道這與該陣列有關。我不確定如何解決它。我嘗試了幾種不同的方式。只是不是這個。謝謝。 – 2013-03-01 17:22:37

1

試試這個。

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

int CountEvenNumbers(int numbers[], int length); 
int main(void) 
{ 
    int length; 
    int X;int Z; int Y; int W; 
    X=0;Y=0;Z=0;W=0; 
    printf("Enter list length\n"); 
    scanf("%d",&length); 

    int *numbers = (int*) calloc(length, sizeof(int)); //*************** 


    if (length<=0) 
    {printf("sorry too low of a value\n"); 
    return 0;} 
    else 
    { 
     printf("Now, enter %d integers\n",length); 
     for (X=0;X<length;X++) 
     {scanf("%d",&Y);//X is position in array, Y is value. 
     numbers[X]=Y; 
     } 
     printf("The list reads in as follows:\n"); 
     for (W=0;W<length;W++) 
     {Z=numbers[W]; 
     printf("%d ",Z);} 
     printf("\n"); 
    } 
    CountEvenNumbers(numbers , length); //************** 
    free (numbers); 
    return 0; 
} 

int CountEvenNumbers(int numbers[], int length) 
{ 
    int odd_count;int even_count;int P;int Q; 
    Q=0; odd_count=0;even_count=0; 
    for (P=0;P<length;P++) 
     if (numbers[Q]==0) 
     {even_count++; 
    Q++;} 
     else if ((numbers[Q]%2)!=0) 
     {odd_count++; 
    Q++;} 
     else 
     {even_count++; 
     Q++;} 
     printf("There are %d even numbers in the series\n",even_count); 
     return 0; 
}