知道数组大小的“sizeof”在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))并且它工作得很好但是,现在在function内部它不起作用,为什么?

请记住, 数组的名称“衰减”到指向其第一个元素的指针 。使用时

 sizeof(laiArreglo) 

main ,它评估为

 10*sizeof(int) 

并不是

 sizeof(int*) 

因为这是腐败不会发生的案例之一 。

当你使用

 ShowNumber(laiArreglo); 

将它传递给函数,衰变确实发生了。 所以上面的陈述相当于

 ShowNumber(&laiArreglo[0]); 

当你使用

 sizeof(laiArreglo) 

从函数ShowNumber ,它的计算结果为

 sizeof(int*) 

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

在你的函数ShowNumber() ,你经过的是指针而不是数组