定义数组的错误
问题描述:
我想按照标题中所述的方式引入我的程序的二进制搜索功能。但不断得到两个我不知道如何解决的错误。定义数组的错误
这是编译错误,我得到了我的代码:
: expected expression before '{' token
array[size]={1,3,6,8,12,13,16};
^
upg10.8.c: In function 'binarySearch':
upg10.8.c:55:7: warning: control reaches end of non-void function [-Wreturn-
type]
}
^
任何想法,什么是在这两种情况导致的吗?
你可以找到下面的代码:
#include <stdio.h>
#include <stdlib.h>
int binarySearch(int n, int array[], int search);
int main(void){
int search, size=7, array[size], middle;
array[size]={1,3,6,8,12,13,16};
printf("input search number:\n");
scanf("%d", &search);
middle = binarySearch(size, array, search);
if(middle ==-1){
printf("There is no index corresponding to that search number");
}
else{
printf("Index %d for Search%d", middle, search);
}
return 0;
}
int binarySearch(int n, int array[], int search){
int first =0;
int last = n-1;
int middle= (first+last)/2;
while(first<=last){
if(array[middle]<search)
first= middle +1;
else if(array[middle]==search){
return search;
}
else
last = middle -1;
middle = (first +last)/2;
return middle;
break;
}
if(array[first]>array[last])
return -1;
}
答
取出array[size]={1,3,6,8,12,13,16};
。你不能在声明后初始化数组的值。但只在减速时。正确的代码是
int array[]={1,3,6,8,12,13,16};
另外声明尺寸宏恒定。我认为它更好。它会看起来像
#define size 7
一切看起来不错!
答
int search, size=7, array[size], middle;
在这里您定义了数组对象array
。请注意,大小不是一个常数,所以这是一个VLA(可变长度数组)。并非所有的编译器都支持VLA,并且在这里你不需要一个。
array[size]={1,3,6,8,12,13,16};
这是几种错误。
array[size]
将是array
元件7 - 但array
只能通过6
具有元素0显然,你的意思是到7个值{1,3,6,8,12,13,16}
分配到的array
7元,但你不能做这个办法。实际上,数组对象可以被初始化,但是它们不能被分配给(出于复杂的历史原因)。
{1,3,6,8,12,13,16}
不是一个表达式,所以它不能出现在任务的右侧,不管左侧是什么。这是一个有效的初始化程序。
下降size
的定义和改变array
的声明如下:
int array[] = {1,3,6,8,12,13,16};
既然你已经初始化array
具有7个元素,你不必告诉编译器有多少元素它都有;大小是自动为您确定的。 (这是为数不多的事情Ç会帮忙,为你做一个。)
现在你可以定义
const int size = 7;
但你不得不为array
和size
仔细更新初始化在一起,并确保他们是一致的。相反,你可以计算大小:
const int size = sizeof array/sizeof array[0];
如果你想声明一个数组的初始值,那么你必须在它的声明中这样做。在其他地方,您只能分配给单个元素,而不能分配给整个数组。此外,假设控制在binarySearch()函数中传递出'while'循环。如果在这种情况下你可以确定'array [first]> array [last]',那么你应该*无条件地*返回'-1'。否则,您必须在该条件不成立的情况下指定返回值。 –
'array [size] = {1,3,6,8,12,13,16};'在C中没有意义。你想通过这个做什么? – AnT