#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里面可以正常输出数组的长度?
数组做为参数的时候就退化成了指针了
sizeof 算出来的是指针的大小,不是你想的数组的大小
一般在C里面的用法是将数组的长度传递进去,这需要一个额外的参数
C++可以用vector等容器避免大部分数组的操作,对于字符数组也有string可以替代,也有可以传递数组大小的奇迹淫巧
数组一旦作为参数传递 退化为指针,就不知道原来长度了。。。
如果你需要计算数组长度的函数,可以使用宏定义 或者 如果是C++,也用相应的模板技巧,这比宏定义安全