传递参数使整数指针为
我找不到我的问题。一直给我这些错误:传递参数使整数指针为
"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 }
阅读一个C教程,真的。 array[index]
下标/索引数组,因此它在数组中产生index
th元素。
CountEvenNumbers(numbers, length);
在第28行,你想传递的整数:如果您想通过阵列要对自己(当然,而是一个指向它的第一个元素),然后简单地写它的名称操作数字的索引“长度”。您应该只是通过数字本身,所以像CountEvenNumbers(numbers, length);
的回答你的问题是交换这样的:
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是不是真的在元件您的阵列,无论如何,它溢出它。
谢谢!我知道这与该阵列有关。我不确定如何解决它。我尝试了几种不同的方式。只是不是这个。谢谢。 – 2013-03-01 17:22:37
试试这个。
#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;
}
在您的代码中包含行号的荣誉! – 2013-03-01 16:55:50