我有这个功能:
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)
,这不是你想要的.