gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:56:11 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com