C语言如何获得数组长度(size/size遇到了问题)

void bubble_sort(int a[]){
int n = sizeof(a)/sizeof(a[0]); //自定义函数中,这个n就等于2了,为什么呢

}
main(){
int a[20];
int n =sizeof(a)/sizeof(a[0]); //主函数中,用此方法可得到正确长度
}

在自定义函数中,形式参数的int a[]被自动转换成int *a,a已经变成了指针,而指针的长度总是4,因此如果int的长度为2的话,sizeof(a)/sizeof(a[0])就是4/2,结果为2。追问

谢谢, 这种情况,C语言中没办法节省掉一个参数吗。

追答

没办法。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-28
使用sizeof的方法的前提是使用的是数组名,你这里的形参a,本质是一个指针,无法实现,只能再添加一个参数作为数组长度追问

谢谢回答,没有其他办法能省一个参数吗。

追答

C里做不到,C++有引用可以做到

本回答被提问者采纳
第2个回答  2015-06-28
32位系统应该是1,第一个a是指针应该是4字节,第二个a[0]是整型元素是4字节
相似回答