学习算法的时候,写线性查找表的时候出现了错误。 如下图所示,尝试使用sizeof取数组的长度,但结果一直与预想的不一致。
intsearch(intdata[],int target ) {int i; intlength=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 (数据,9 ); 发现length值为1,预期值为10 :
用sizeof将length值代入main函数内,将其作为search的其他形式进行实验。 完整的代码如下。
# include stdio.hintsearch (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 ); 返回- 1; }int main () intdata(10 )={ 1,2,3,4,5,6,7,8,9,0 }; intlength=sizeof(data )/sizeof ) data[0]; 搜索(data,9,length ); 返回0; }结果正确,可以看出length值为10 :
原因:1.以数组为自变量时为指针,指针的大小在32位系统中为4位,在64位系统中为8位,最终获得的是指针的大小。
2.sizeof处理处于编译期。
解决方法:1.将形状参数添加到自定义函数中,并在传递参数时传递数组的长度
2 .宏观定义
#definelengthsizeof(data )/sizeof (data [0] ) )。