新手请教关于指针函数的语法错误?

#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
都是可以的。。。