为什么数组大小为1

Ant*_*cia 1 c arrays sizeof

可能重复:
C编程语言中数组的大小?

我正在尝试编写一个函数,如果值在数组中,则返回1.这是代码:

int inArrayInt(int iVal, int iArray[])
{
    int i;
    int arrayL = sizeof(*iArray) / sizeof(int);
    int flag = 0;
    for(i=0; i < arrayL; i++)
    {
        if(iVal == iArray[i])
        {
            flag = 1;
        }
    }
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

问题是arrayL = sizeof(*iArray) / sizeof(int);总是求值为1,即使数组包含20个元素.为什么?

pan*_*kal 6

因为当您将函数作为参数传递给函数时,数组会衰减到指针.所以sizeof(array)不会给你数组的大小,而是指针的大小.

您可以将数组大小作为a extra argument,或者将数组作为a传递,reference以便sizeof(数组)将为您提供正确的大小.(详细说明:什么是数组衰减?)

  • 作为旁注,OP通过执行`sizeof(*iArray)`来提交另一个错误. (3认同)