求数组元素个数,该怎么解决

求数组元素个数
定义如下一个数组 int a[] = {1,2,3,4,5}
在main函数中利用 sizeof(a)/sizeof(int),这里sizeof(a)计算出了数组 a 所占的大小,能够得到这个数组的元素个数。
但是我在自定义函数来求其个数时,把数组 a 传给该函数,用 
sizeof(a)/sizeof(int),这里的sizeof(a)求的却是指针的大小了,而不是数组的大小了,所以得不到数组个数。
请问这是怎么回事呢?
另外自己写函数来求数组的元素个数?

------解决方案--------------------
探讨
定义如下一个数组 int a[] = {1,2,3,4,5}
在main函数中利用 sizeof(a)/sizeof(int),这里sizeof(a)计算出了数组 a 所占的大小,能够得到这个数组的元素个数。
但是我在自定义函数来求其个数时,把数组 a 传给该函数,用
sizeof(a)/sizeof(int),这里的sizeof(a)求的却是指针的大小了,而不是数组的大小了,所以得不……

------解决方案--------------------
作函数参数时数组名退化为指针

------解决方案--------------------
传递给函数的时候,相当于退化。
------解决方案--------------------
首先C语言里面不支持数组作为形参来进行调用
例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为指针来处理的,所以上面的函数完全等价于void fun(int *a);所以当你利用sizeof的时候返回的将是int指针的内存字节数,所以当你想知道数组长度的时候只能做这样的函数了,void fun(int *a,size_t n);
------解决方案--------------------
同上上……
int a[]={1,2,3,4};//a是一种数据结构,它占4*sizeof(int)个字节
int b;//b也是一种数据结构,它占1*sizeof(int)个字节

把数组当形参传递时,就退化成了指针

------解决方案--------------------
作函数参数时数组名退化为普通指针
------解决方案--------------------
当你把数组传给函数的时候,数组名是等价于指针的。
而对于sizeof来说,数组名是有特殊意义的,它是一个类型,所以可以求出其大小


同意2楼的,
------解决方案--------------------
用宏吧.

#define N (sizeof(a)/sizeof(int))

记住N是long unsigned int 的常量哦....