传递参数使得指针来自整数 [英] passing argument makes pointer from integer

查看:159
本文介绍了传递参数使得指针来自整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找不到我的问题。不断给我这些错误:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆