"sizeof" 知道数组的大小在 C 函数中不起作用

"sizeof" to know the size of an array doesn't work in a function in C

int main()
{
int laiArreglo[] = {5,8,2,3,1,4,6,9,2,10}, liElemento;

printf("\nInsert the number: ");
            scanf("%d", &liElemento);
            ShowNumber(laiArreglo);
return 0;
}




void ShowNumber(int laiArreglo[])
{
    int liContador;

    printf("\nNumbers: ");

    for (liContador = 0; liContador < sizeof (laiArreglo) / sizeof (int); liContador++)
    {
        printf("%d ", laiArreglo[liContador]);
    }
}

我在 main 中使用 (sizeof (laiArreglo) / sizeof (int)) 并且它工作得很好但是,现在 在函数内部它不起作用,为什么? .

在您的函数 ShowNumber() 中,您传递的是 指针 而不是 数组

请记住,数组的名称 "decays" 指向其第一个元素的指针 。当您使用

sizeof(laiArreglo)

main 求得

10*sizeof(int)

而不是

sizeof(int*)

原样 one of the cases where decay dosen't happen.

当您使用

ShowNumber(laiArreglo);

将它传递给一个函数,衰减确实发生了。所以上面的语句等价于

ShowNumber(&laiArreglo[0]);

当你使用

sizeof(laiArreglo)

从函数 ShowNumber 求得

sizeof(int*)

因为laiArreglo是一个指向int的指针,指向数组第一个元素的地址laiArreglo.