C语言指针一个小问题

题目如下:编写函数int find(int *p,int n,int x),在指针p所指的数组中查找整型数x,如果x 在数组中,则该函数返回1,否则返回0。n为数组的大小。我已经将程序写完,但是说这里要int *d[10]=a才对,为什么我这里要&a才能运行呢,如果我按照所说的=a就报错了,还是他讲错了?

#include <stdio.h>
int main()
{int find(int *p,int n, int x);
int a[10]={1,11,21,31,41,51,61,71,81,91};
int (*d)[10]=&a;
int c,m;
printf("请输入要查找的整型数:"); 
scanf("%d",&c); 
m=find(*d,10,c);
if(m==1)
printf("%d在数组中",c);
else
printf("%d不在数组中",c);
}
int find(int *p,int n, int x)
{int i;
for(i=0;i<n;i++)
{if(x==p[i])
{return 1;
break;
}
else
{return 0;
}
}
}

d是指针类型

下面的写法也可以

int *d=a;
int c,m;
printf("请输入要查找的整型数:"); 
scanf("%d",&c); 
m=find(d,10,c);
...

函数int find(int *p,int n,int x) 里逻辑有错误,修改如下,改动处见注释,供参考:

#include <stdio.h>
int main()
{
    int find(int* p, int n, int x);
    int a[10] = { 1,11,21,31,41,51,61,71,81,91 };
    int* d = a;  //int(*d)[10] = &a;  修改
    int c, m;
    printf("请输入要查找的整型数:");
    scanf("%d", &c);
    m = find(d, 10, c);  //m = find(*d, 10, c); 修改
    if (m == 1)
        printf("%d在数组中", c);
    else
        printf("%d不在数组中", c);
}
int find(int* p, int n, int x)
{
    int i;
    for (i = 0; i < n; i++)
    {
        if (x == p[i])
        {
            return 1;
            //break;      修改
        }
    }
    //else                修改
    //    {                 修改
    return 0;
    //}                   修改
    //}                   修改