鱼C论坛

 找回密码
 立即注册
查看: 2439|回复: 4

指针打印问题

[复制链接]
发表于 2020-3-4 21:13:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问这种情况是咋回事啊?目前很崩溃
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int num[] = {0, 10, 14, 21, 38, 45, 47, 53, 81, 87, 99};

  4. int* binserach(int num[], int *);

  5. int main()
  6. {
  7.         int *result, flag = 0;
  8.         result = binserach(num, &flag);
  9.         if(flag != 0)
  10.         {
  11.                 printf("查找成功,下标为%d\n", flag);
  12.         }
  13.         else if(*result == 0){
  14.                 printf("没有更小的元素\n");
  15.                 printf("比该数大的最小的元素下标为%d,对应元素为%d\n", *(result+1), num[*(result+1)]);
  16.         }else if(*result == 10){
  17.                 printf("比该数小的最大元素的下标为%d, 对应元素为%d\n", *result, num[*result]);
  18.                 printf("没有更大的数\n");
  19.         }else{
  20.                 printf("%d--%d\n", *result, *(result + 1));
  21.                 printf("对应元素为%d--%d\n", num[*result], num[*(result + 1)]);
  22.         }
  23.         return 0;
  24. }

  25. int* binserach(int num[], int *flag)
  26. {
  27.         int low,high, mid, key, tab[2], *p = NULL;
  28.         *flag = 0;
  29.         high = 10;
  30.         low = 1;                                                //零号空间空闲不使用
  31.         printf("输入查找值:\n");
  32.         scanf("%d", &key);
  33.         while(low <= high)
  34.         {
  35.                 mid = (high + low) / 2;
  36.                 if(num[mid] > key)
  37.                 {
  38.                         high = mid - 1;
  39.                         tab[1] = mid;
  40.                 }else if(num[mid] < key)
  41.                         {
  42.                                 low = mid + 1;
  43.                                 tab[0] = mid;
  44.                         }
  45.                 else{
  46.                         *flag = mid;
  47.                         break;
  48.                 }
  49.         }
  50.         if(tab[1] == 1)
  51.                 tab[0] = 0;
  52.         if(tab[0] == 10)
  53.                 tab[1] = 0;
  54.         if(*flag == 0)
  55.         {
  56.                 p = tab;
  57.                 return p;
  58.         }else
  59.                 return 0;
  60. }
复制代码

代码是实现二分查找中未找到返回比带查找数字大的最小数字和比此数小的最大数字;若找到则返回下标。
2.png
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-4 21:34:05 | 显示全部楼层
你的result自始至终都没有赋值,所以呢,result的值是一个随机的值,所指向的空间也不知道在哪里。相应的*result, *(result+1),的值都是随机的某个值,所以打出来的值很奇怪就对了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 10:01:52 | 显示全部楼层
不是啊,我在binserach里面返回了指针给result赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 10:04:10 | 显示全部楼层
major_lyu 发表于 2020-3-4 21:34
你的result自始至终都没有赋值,所以呢,result的值是一个随机的值,所指向的空间也不知道在哪里。相应的*r ...

我的binsearch函数返回了指针给result复制啊,而且我的第二个图片就可以打印出正常的值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 13:29:46 | 显示全部楼层
sulli 发表于 2020-3-5 10:04
我的binsearch函数返回了指针给result复制啊,而且我的第二个图片就可以打印出正常的值

好吧,那么当你binsearch 函数返回的是0的时候,地址为0的内存单元的数值是多少呢?地址p+1也就是地址位4的内存单元中的数又是多少呢?这些你都是不能确定的啊。所以当你在binsearch函数中最后一个else返回0给result的情况下,打印出来的东西就是未知的啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表