2015-04-04 81 views
-1
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(laiArreglo)/的sizeof(int)的),它里面的工作完美,但是,现在它的功能不起作用,为什么?“的sizeof”知道数组的大小函数在C不工作

+2

因为它是一个指针而不是数组。 – BLUEPIXY 2015-04-04 14:04:46

+1

'ShowNumber'的参数是一个'int *'。你必须传递一个额外的参数来表示数组的大小来修复它。 – 2015-04-04 14:05:13

回答

1

请记住,数组"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

1

在你的函数ShowNumber(),你过去是一个指针,而不是一个阵列

相关问题