摘要:本文主要向大家介绍了C/C++知识点之C语言的sizeof,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言的sizeof,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
今天帮同学想用C实现数组的折半查找,本来算法挺简单的,可是折腾了好几个小时才发现问题在哪,这个sizeof坑人不浅啊。
1 #include
2 void m(int []);
3 int main(){
4 int a[9]={1,2,3,4,5,6,7,8,9};
5 printf("%d\n",sizeof(a));
6 m(a);
7
8 return 0;
9 }
10
11 void m(int k[]){
12 printf("%d\n",sizeof(k));
13
14 }上面第5行的结果是39,第12行的结果是4,为啥同一个数组怎么结果不一样呢?原因就是发生在sizeof这里。那是因为sizeof是一个操作符,误认为是一个函数,还有就是数组在传递的过程中已经失去其原有的本义,在m函数中其实际上是传递的一个数组指针,所以第12行实际上是测试的指针的大小。
明白这里了,附上一篇C实现折半的代码
1 #include
2 int binearySearch(int[],int,int);
3 int main(){
4 int a[9]={1,2,3,4,5,6,7,8,9};
5 int m=5;
6 int length=sizeof(a)/sizeof(int);
7 int s=binearySearch(a,length,m);
8 if(s==0)
9 printf("找不到!\n");
10 else
11 printf("%d\n",s);
12 return 0;
13 }
14
15 int binearySearch(int m[],int N,int k){
16 int start,end,middle;
17 start=0;
18 end=N;
19 while(start<end){
20 middle=(start+end)/2;
21 if(m[middle]==k){
22 return middle+1;
23 }
24 else if(m[middle]>k){
25 end=middle;
26 }
27 else if(m[middle]<k){
28 start=middle;
29 }
30 }
31 return 0;
32 }上面结果是5.
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号