可能实现函数实现二分查找,我们首先想到的是接下来这种代码:

//二分查找#include <stdio.h>#include <string.h>int cz_sz(int num[],int a){int left,right,mid;left=0;right=sizeof(num)/sizeof(num[0])-1;mid=(left+right)/2;while(left<=right){if(num[mid]>a){right=mid+1;}elseif(num[mid]<a){left=mid+1;}elsereturn mid;}if(left>right)return 0;}int main(){int left,right,mid;int a,t;int num[]={1,2,3,4,5,6,7,8,9,10};printf ("请输入你要查找的值:");scanf ("%d",&a);t=cz_sz(num,a);if(0==t){printf ("没有找到\n");}else{printf ("找到了,下标为:%d\n",t);}return 0;}

然后你会尴尬的发现:
当你输入了数组当中有的数字之后,他居然给我返回一个..........话不多说上图:

????这是怎么回事呢

原来啊,数组在传参的时候仅仅只是传参了首地址过去。、,所以才会导致计算长度的时候出现错误。
我们的解决办法是,把计算数组长度放在主函数里面,在主调函数中多增加一个参数,来解决问题。
朋友们我们一定要记住:形参其实只是实参的一份临时拷贝,对形参的改变不会改变实参值,只有通过传址调用建立联系才能对值进行更改(简而言之:使用指针!!!!)

我们将函数改为如下即可:

//二分查找#include <stdio.h>#include <string.h>int cz_sz(int num[], int a, int b){int left, right, mid;left = 0;right = b - 1;while (left <= right){mid = (left + right) / 2;if (num[mid] > a){right = mid + 1;}elseif (num[mid] < a){left = mid + 1;}elsereturn mid;}return 0;}int main(){int a, t;int num[] = { 1,2,3,4,5,6,7,8,9,10 };int b = sizeof(num) / sizeof(num[0]);printf("请输入你要查找的值:");scanf_s("%d", &a);t = cz_sz(num,a,b);if (0 == t){printf("没有找到\n");}else{printf("找到了,下标为:%d\n", t);}}


现在执行就没有什么问题了,希望读者能够技术分享,有什么问题指出来,哈哈。然后,scanf_s函数是我在VS2019中程序的规范要求!!!!!











©著作权归作者所有:来自51CTO博客作者防.的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 函数递归、匿名函数、内置函数
  2. 20201112 装饰器之函数即变量
  3. 20201203 函数式编程与函数不同
  4. 20201203 高阶函数
  5. 干货丨DolphinDB通用计算教程
  6. 在数据中查找异常值的5种方法总结及示例解释
  7. python入门之 字典算法实现及操作
  8. DolphinDB脚本语言的混合范式编程
  9. 闭包函数及其应用

随机推荐

  1. android中的滚动条ScrollView
  2. Android引导页面去除白屏
  3. ClipboardManager android剪切板使用
  4. Android之复选框对话框
  5. android 使用Okhttp封装上传JSON格式数据
  6. 2013.04.16——— android 获取状态栏高
  7. android 第一次运行应用的引导界面
  8. Eclipse 中的Android 工程突然无法启动调
  9. Android基础--电话拨号器
  10. Ubuntu 12.04 安装 Tomcat8 遇到的问题