我有这个功能:
int second(int x,int c[100])
{
int b,e=0;
for(b=0;b<x;b++)
{
if(c[b]!=(65||117))
e++;
}
return (e);
}
此循环将检查数组中的数字数不相等
到65或117,要增加的值是计算多少
数字是那些,这个值将返回到主函数。
现在我想在main函数中使用返回的值。 这是我正在使用的语法:
h=second(x,c[100]);
我收到此错误:
"passing argument 2 of second makes pointer from integer without a cast"
如何让函数返回该值?
答案 0 :(得分:5)
要了解正在发生的事情,需要了解以下事项。
在int second(int x,int c[100])
中,参数c
声明为数组为100 int
会自动转换为声明c
为指针到int
。这种对数组的特殊处理始终应用于函数参数。 (它不适用于参数的子部分。例如,指向数组的指针不会转换为指向指针的指针。)
在您的计划中的某个地方,您可能会有像int c[100];
这样的行。该行确实将c
声明为100 int
的数组。
在h=second(x,c[100]);
中,表达式c[100]
引用数组c
的元素100。因此,这个表达式是单个int
。您不应该将int
传递给函数,因为它期望指向int
。您可能希望将指针传递给数组的第一个元素。这个的C语法是&c[0]
。 C提供了一些帮助,可以将其缩写为c
。如果您编写h = second(x, c);
,则c
将自动从数组转换为指向其第一个元素的指针。
只要表达式(包括任何子表达式)是一个数组且不是sizeof
,一元&
或_Alignof
的操作数且不是字符串,就会发生此自动转换用于初始化数组的文字。
此外,if(c[b]!=(65||117))
不会测试c[b]
是否不等于65或117.要执行此测试,您应使用if (c[b] != 65 && c[b] != 117)
。你写它的方式,65||117
是一个表达true if either 65 or 117 is true
的表达式。出于这些目的,非零值为真,因此65||117
为真。同样出于这些目的,true
变为整数1(并且false将为0)。因此,此测试为if (c[b] != 1)
,这不是您想要的。
答案 1 :(得分:3)
你想要
h=second(x,c);
你现在正在做的是尝试在索引100处传递元素,这很糟糕。你想传递数组。
答案 2 :(得分:2)
你正在以错误的方式传递阵列
你应该这样做:h=second(x,c);
function(int a , int array[])
表示2nd argument
是数组的base address
对于数组,基址实际上是数组的名称。
示例,数组[100] 的基地址为array
答案 3 :(得分:2)
您的通话错误,不应包含括号。只是做:
h = second(x, c);
此外,还有
if(c[b]!=(65||117))
可能用英文读,这不是C的工作原理。
一定是
if(c[b] == 65 || c[b] == 117)
||
运算符分隔整个表达式,而不仅仅是左侧的替代。