c中自定义函数通过sizeof来输出数组的长度为何不正确?【已解决】
#include <stdio.h>
//输出数组的长度
int arr_length(double a[]) {
int len=sizeof(a)/sizeof(a[0]); //1 ??????为何输出1呢 为何不是数组的长度
return len;
}
int main(){
double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
printf("arr_length里面的数组长度为%d\n",arr_length(arr));
int length = sizeof(arr)/sizeof(arr[0]);
printf("main里面的数组长度为%d\n",length); //正常输出, 10
return 0;
}
结果输出:
个人用的编辑器是dev-c++,64位操作系统。
请问如何操作才能使arr_length里面可以正常输出数组的长度?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
数组做为参数的时候就退化成了指针了
sizeof 算出来的是指针的大小,不是你想的数组的大小
一般在C里面的用法是将数组的长度传递进去,这需要一个额外的参数
C++可以用vector等容器避免大部分数组的操作,对于字符数组也有string可以替代,也有可以传递数组大小的奇迹淫巧
数组一旦作为参数传递 退化为指针,就不知道原来长度了。。。
如果你需要计算数组长度的函数,可以使用宏定义 或者 如果是C++,也用相应的模板技巧,这比宏定义安全
你在将 arr 传入 arr_length 函数的时候,传入的就是 arr 的指针,并不是 arr 本身,用来计算的也是指针的长度,并不是数组的长度。
你这个目的,用个宏就能简单实现了,不一定要用函数
函数内的sizeof做不到
根本原因是sizeof在编译期求值, 而double a[]这个函数参数的长度在编译期不确定 (arr[]是确定的)
你需要
#define
(不是函数), 或者另开一个参数用来在运行时传递长度.