我有这个功能:
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);
}
Run Code Online (Sandbox Code Playgroud)
此循环将检查数组中有多少个数不等于
65或117,并且要递增的值用于计算这些
数字的数量,此值将返回到main函数.
现在我想在main函数中使用返回的值.这是我使用的语法:
h=second(x,c[100]);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
"passing argument 2 of second makes pointer from integer without a cast"
Run Code Online (Sandbox Code Playgroud)
如何使函数返回该值?
要了解正在发生的事情,需要了解以下事项.
在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]指的是数组的元素100 c.因此,这个表达式是单一的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),这不是你想要的.