#include <stdio.h>
int numbers[1000001] = {0};
int i,j;
int m;
int left, right, mid;
int n, k;
int BinarySearch(int (*numbers)[i], int m);
int main() {
// 反复读入数字和查找数字的数量
while (scanf("%d %d", &n, &k) != EOF) {
// 读入给定的数字
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
for (j = 0; j < k; j++) {
// 读入待查找的数字,
scanf("%d", &m);
printf("%d", BinarySearch((*numbers)[i], m));
}
}
}
int BinarySearch(int (*numbers)[i], int m)
{
left = 0, right = k - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (numbers[mid] == m)
{
printf("%d", m);
if (j < k)
printf(" ");
}
if (numbers[mid] < m)
{
left = mid + 1;
}
if (numbers[mid] > m)
{
right = mid - 1;
}
printf("0");
}/*while*/
return -1;
}/*function binarysearch*/
Main.c:19:49: error: subscripted value is neither array nor pointer nor vector
printf("%d", BinarySearch((*numbers)[i], m));
^
int (*numbers)[i] 应该传递一个二维数组吧?
首先,按照你以上函数功能的理解,只需要函数传递一个int 数组或者指向该数组的指针就ok,函数原型声明的时候应该简单修改即可,调用的
时候只需要传递 numbers 数据名即可。
因为你定义了全局变量,所以没有必要传入中的int BinarySearch中的指针,把指针删去就好了。(而且你传入的还是数组指针……)
个人吐槽,全局变量用太多了orz.
如果你要传递一个指针数组到函数,那么你应该先定义一个指针数组,把一个整形数组加*输入进去编译器是读取不出你的意思的....
如果你输入numbers,那么你是传递了一个数组的首地址进去;
如果你定义一个指针*p,那么你输入p的话是传递了一个指针变量进去;
如果你要输入指针数组,那么可以定义一个(*p)【100001】之类的指针数组;
不过我觉得你应该是需要传递一个数组的地址进去吧?后面在使用整形的数组元素,所以函数第一个参数定义为int number[i]亦或int *p
都是可以的。。。