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