指针打印问题
请问这种情况是咋回事啊?目前很崩溃#include <stdio.h>
#include <stdlib.h>
int num[] = {0, 10, 14, 21, 38, 45, 47, 53, 81, 87, 99};
int* binserach(int num[], int *);
int main()
{
int *result, flag = 0;
result = binserach(num, &flag);
if(flag != 0)
{
printf("查找成功,下标为%d\n", flag);
}
else if(*result == 0){
printf("没有更小的元素\n");
printf("比该数大的最小的元素下标为%d,对应元素为%d\n", *(result+1), num[*(result+1)]);
}else if(*result == 10){
printf("比该数小的最大元素的下标为%d, 对应元素为%d\n", *result, num[*result]);
printf("没有更大的数\n");
}else{
printf("%d--%d\n", *result, *(result + 1));
printf("对应元素为%d--%d\n", num[*result], num[*(result + 1)]);
}
return 0;
}
int* binserach(int num[], int *flag)
{
int low,high, mid, key, tab, *p = NULL;
*flag = 0;
high = 10;
low = 1; //零号空间空闲不使用
printf("输入查找值:\n");
scanf("%d", &key);
while(low <= high)
{
mid = (high + low) / 2;
if(num > key)
{
high = mid - 1;
tab = mid;
}else if(num < key)
{
low = mid + 1;
tab = mid;
}
else{
*flag = mid;
break;
}
}
if(tab == 1)
tab = 0;
if(tab == 10)
tab = 0;
if(*flag == 0)
{
p = tab;
return p;
}else
return 0;
}
代码是实现二分查找中未找到返回比带查找数字大的最小数字和比此数小的最大数字;若找到则返回下标。 你的result自始至终都没有赋值,所以呢,result的值是一个随机的值,所指向的空间也不知道在哪里。相应的*result, *(result+1),的值都是随机的某个值,所以打出来的值很奇怪就对了。 不是啊,我在binserach里面返回了指针给result赋值 major_lyu 发表于 2020-3-4 21:34
你的result自始至终都没有赋值,所以呢,result的值是一个随机的值,所指向的空间也不知道在哪里。相应的*r ...
我的binsearch函数返回了指针给result复制啊,而且我的第二个图片就可以打印出正常的值 sulli 发表于 2020-3-5 10:04
我的binsearch函数返回了指针给result复制啊,而且我的第二个图片就可以打印出正常的值
好吧,那么当你binsearch 函数返回的是0的时候,地址为0的内存单元的数值是多少呢?地址p+1也就是地址位4的内存单元中的数又是多少呢?这些你都是不能确定的啊。所以当你在binsearch函数中最后一个else返回0给result的情况下,打印出来的东西就是未知的啊。
页:
[1]