?学习算法时,写线性查找表时出现一个错误,如下图,想用sizeof来获取数组长度,结果一直和设想不符。
int search(int data[], int target) {
int i;
int length = sizeof(data)/sizeof(data[0]);
for (i = 0; i < length; i++) {
if (data[i] == target) {
return i;
}
}
return -1;
}
?传入如下参数进行Debug:
int data[10] = { 1,2,3,4,5,6,7,8,9,0 };
search(data, 9);
发现length值为1,预期值为10:
?将length值通过sizeof在main函数内进行赋值,并将其作为search另一个形参进行实验,完整代码如下:
#include<stdio.h>
int search(int data[], int target,int length) {
int i;
for (i = 0; i < length; i++) {
if (data[i] == target) {
printf("%d", i);
return i;
}
}
printf("-1");
return -1;
}
int main() {
int data[10] = { 1,2,3,4,5,6,7,8,9,0 };
int length = sizeof(data)/sizeof(data[0]);
search(data, 9,length);
return 0;
}
结果正确,可以看到length值变为10了:
?原因:1.数组作为参数时变成指针,对指针取大小在32位系统是4位,64位系统是8位,最终获取? ? ? ? ? ? ? ? ?的是指针的大小。
? ? ? ? ? ? 2.sizeof处理在编译期。
解决方法:1.自定义函数新增一个形参,传参时将数组长度也传入
? ? ? ? ? ? ? ? ? 2.用宏定义
#define length sizeof(data)/sizeof(data[0])
|