传递参数使得指针来自整数 [英] passing argument makes pointer from integer
问题描述
我找不到我的问题。不断给我这些错误:
I can't find my problem. keeps giving me these errors:
"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 }
推荐答案
你的问题的答案是交换这个:
The answer to your question is to swap this:
CountEvenNumbers(numbers[length], length);
这个
CountEvenNumbers(numbers, length);
但是,如果您继续编码,您可能会发现无用的技能是解密warrning /错误消息:
However, if you continue with coding, a skill you might find invaluable is deciphering warrning/error messages:
c:2:5:注意:预期'int *'但参数类型为'int'
c:28:1:警告:传递'CountEvenNumbers'的参数1使得
整数的指针没有强制转换[默认启用]
"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]"
那是什么意思?它声明在第28行( CountEvenNumbers(数字[长度],长度);
)它期望你进行参数1的转换,这意味着你传递了它一些它没想到的东西。所以你知道第一个参数有问题。
So what does that mean? It states that on line 28 (CountEvenNumbers( numbers[length] , length );
) it expected you to make a cast of argument 1, meaning you passed it something that it did not expect. So you know something is wrong with the first argument.
这里的诀窍是另一行:期望'int *'但参数类型为'int'
它是说我想要一个指向整数的指针,但你给了我一个整数。这就是你知道你传递错误类型的方式。
The trick here is the other line: expected 'int *' but argument is of type 'int'
It's saying "I wanted a pointer to an integer, but you gave me just an integer". That's how you know you're passing the wrong type.
所以你应该问自己的是,参数1的类型是什么?你知道如果你想访问数组中你需要使用 []
的元素,(你在代码的第20行和第25行这样做了),所以通过将 numbers [length]
传递给您的函数,您尝试将单个元素 1 传递给它,而不是像预期的那样传递完整数组。
So what you should be asking yourself is, what type is argument 1? You know if you want to access an element inside the array you need to use the []
's, (you did so on lines 20 and 25 of your code), so by passing numbers[length]
to your function, your trying to pass it a single element1 instead of a full array like it expects.
另一半是期望'int *'
,为什么你的函数期望获得指向int的指针?那是因为在C中,当你传递一个(类型)数组时,它会衰减到一个指针输入)。
The other half of this is expected 'int *'
, why would your function expect to get a pointer to an int? Well that's because in C, when you pass an array of (type) it decays to a pointer to (type).
当然数字[length]实际上并不是你阵列中 的元素,它溢出了它。
这篇关于传递参数使得指针来自整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!