首页 > 编程知识 正文

c语言sizeof求结构体长度,C语言数组定义过大

时间:2023-05-05 05:12:07 阅读:135431 作者:960

学习算法的时候,写线性查找表的时候出现了错误。 如下图所示,尝试使用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] ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。