我找不到我的问题。不断给我这些错误:
"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 }
答案 0 :(得分:11)
你的问题的答案是交换它:
CountEvenNumbers(numbers[length], length);
这个
CountEvenNumbers(numbers, length);
但是,如果您继续编码,您可能会发现一项非常宝贵的技能是解密warrning /错误消息:
“c:2:5:注意:预期'int *'但参数类型为'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]
传递给你的函数,你试图传递一个单元素 1 ,而不是像预期的那样传递一个完整的数组。
另一半是expected 'int *'
,为什么你的函数期望获得指向int的指针?那是因为在C中,当你将一个(类型)数组decays传递给一个指向(类型)的指针时。
1当然,数字[length]实际上并不是 元素中的元素,它会溢出它。
答案 1 :(得分:3)
在第28行,你试图以索引“length”的数字传递整数。您应该自己传递数字,例如CountEvenNumbers(numbers, length);
答案 2 :(得分:1)
真的,阅读C教程。 array[index]
对数组进行下标/索引,从而生成数组中的index
元素。如果你想传递数组来自己操作(好吧,而不是指向它的第一个元素的指针),那么只需写下它的名字:
CountEvenNumbers(numbers, length);
答案 3 :(得分: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;
}