知道数组大小的“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()
,你经过的是指针而不是数组 。