传递参数2使得指针来自整数而没有强制转换

Sam*_*uel 1 c

我有这个功能:

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)

如何使函数返回该值?

Eri*_*hil 6

要了解正在发生的事情,需要了解以下事项.

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),这不是你想要的.