2013-03-01 125 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; 
}