c - 数组搜索只需创建一个指针即可

标签 c arrays pointers

所以我创建了这个函数来搜索数组,但它不起作用,我认为它与传递数组有关。所以我尝试了不同的事情。当我只是简单地创建了一个指向数组的指针时,它就开始工作了,我没有对它做任何事情,为什么呢?

void search(int a[],int n,int find);

int main(void){
    int size;
    int arr[]={345,767,232,45,768,2342,78,-89,-354,-234};

    int *p=arr;

    size=sizeof(arr)/sizeof(int);
    search(arr[size+1],size,-89);
    return 0;
}
void search(int a[],int len,int find){
    int spot,i,FOUND;
    spot=i=FOUND=0;

    for(i=0;i<len;i++)
        if (a[i]==find){
            FOUND=1;
            break;
        }
        if (FOUND==1){
            printf("%d found at element %d\n",find, i);
        }
        else
            printf("Number: %d \tNOT FOUND",find);
    }
}

最佳答案

这段代码的基本问题在于

 search(arr[size+1],size,-89);

您尝试访问的位置arr[size+1]这是数组越界访问。这会调用 undefined behavior .

FWIW,C对数组使用基于 0 的索引,因此对于大小为 n 的数组, arr[n]实际上也是越界访问。有效访问权限为 arr[0]arr[n-1] .

您应该只传递arr ,数组名称,当作为函数参数传递时,它会自动衰减为指向第一个元素的指针。

另一方面,当你这样做

int *p=arr;

并通过p ,您实际上将指向数组第一个元素的指针存储到 p ,并将其传递给函数(这是预期的),因此它工作正常。

这只是一个建议,

 size=sizeof(arr)/sizeof(int);

可以重写为

size=sizeof(arr)/sizeof(arr[0]);

使之更加稳健。

关于c - 数组搜索只需创建一个指针即可,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168283/

相关文章:

arrays - 克服 Swift 中的结构实现

javascript - 按匹配的对象字段数对对象数组进行排序

c++ - 将 double* 一维矩阵转换为 double** 二维方阵

c++ - C++中动态二维数组中的地址

c - 修改双指针而不使用memset

c - 应用malloc

c - 获取用户输入并存储到结构中的元素中

c - C 语言中的 'double pointer' 和 'returning pointer' 哪个更好?

c - 给定以下级数...级数的第 n 项等于 (n - 1)th ^2 +1 并且级数的第一项是 1 使用递归

C GMP 非整数幂