&引用;sizeof“;要知道数组的大小并不需要';t在C中的函数中工作 intmain() { 国际莱亚雷格洛[]={5,8,2,3,1,4,6,9,2,10},利勒门托; printf(“\n插入数字:”); scanf(“%d”和“liElemento”); ShowNumber(laiArreglo); 返回0; } 无效显示编号(int laiArreglo[]) { 国际利孔塔多; printf(“\n编号:”); 对于(liContador=0;liContador

&引用;sizeof“;要知道数组的大小并不需要';t在C中的函数中工作 intmain() { 国际莱亚雷格洛[]={5,8,2,3,1,4,6,9,2,10},利勒门托; printf(“\n插入数字:”); scanf(“%d”和“liElemento”); ShowNumber(laiArreglo); 返回0; } 无效显示编号(int laiArreglo[]) { 国际利孔塔多; printf(“\n编号:”); 对于(liContador=0;liContador,c,arrays,function,sizeof,C,Arrays,Function,Sizeof,我在main中使用了(sizeof(laiArreglo)/sizeof(int)),它工作得很好,但是,现在在一个函数中它不工作了,为什么?在您的函数中ShowNumber(),您过去使用的是一个指针,而不是一个数组请记住,数组的名称指向指向其第一个元素的指针 int main() { int laiArreglo[] = {5,8,2,3,1,4,6,9,2,10}, liElemento; printf("\nInsert the number: "); scan

我在main中使用了(sizeof(laiArreglo)/sizeof(int)),它工作得很好,但是,现在在一个函数中它不工作了,为什么?

在您的函数中
ShowNumber()
,您过去使用的是一个指针,而不是一个数组

请记住,数组的名称指向指向其第一个元素的指针

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]);
    }
}
sizeof(int*)
main
,它的计算结果为

sizeof(laiArreglo)
sizeof(laiArreglo)
而不是

10*sizeof(int)
事实就是这样

当你使用

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]);
    }
}
sizeof(int*)
要将其传递给函数,确实会发生衰减。因此,上述声明相当于

ShowNumber(laiArreglo);
当你使用

ShowNumber(&laiArreglo[0]);
从函数
ShowNumber
,其计算结果为

sizeof(laiArreglo)
sizeof(laiArreglo)

as
lairreglo
是指向
int
的指针,指向数组第一个元素的地址
lairreglo

,因为它是指针而不是数组。
ShowNumber
的参数是
int*
。您必须传递一个表示数组大小的额外参数来修复它。