int binary_search(int arr[], int k,int sz )
{
int left = 0;//被查找元素的左下标记为0
int right = sz -1;//被改进后的地方,此时可以执行
while (left<=right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5 };
int k = 4;
int sz = sizeof(arr) / sizeof(arr[0]);
int b= binary_search(arr, k,sz);//传送的是首元素的地址
if (b == -1)
{
printf("找不到\n");
}
else
{
printf("下标为:%d\n", b);
}
return 0;
}
可能的原因:修改后的二分查找函数,不再尝试获取数组的sizeof,而是使用传递的sz参数。
在调用时如果不使用指针调用,传递时系统容易报错。