sizeof(a)的值是在编译时刻确定的,所以如果你在程序里面这样来做:
int a[] = {1, 2, 3, 4, 5};
int len = sizeof(a)/sizeof(a[0]);
那么没有问题,可以正确的得出数组的长度,因为这个时候在编译时刻可以很容易的知道a有5个元素。
但是你把int a[]作为参数传递到函数里面,编译时刻无法得知你要传送什么样的参数进去,所以这个时候实际上是把a当作一个int 指针处理的,那么sizeof(a)实际上是指针的大小,这个在32位系统上是4,而a[0]是一个整数,sizeof(a[0])在32位系统上的的大小也是4,所以就是1了。