定义数组的错误

问题描述:

我想按照标题中所述的方式引入我的程序的二进制搜索功能。但不断得到两个我不知道如何解决的错误。定义数组的错误

这是编译错误,我得到了我的代码:

: 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; 

     } 
+0

如果你想声明一个数组的初始值,那么你必须在它的声明中这样做。在其他地方,您只能分配给单个元素,而不能分配给整个数组。此外,假设控制在binarySearch()函数中传递出'while'循环。如果在这种情况下你可以确定'array [first]> array [last]',那么你应该*无条件地*返回'-1'。否则,您必须在该条件不成立的情况下指定返回值。 –

+0

'array [size] = {1,3,6,8,12,13,16};'在C中没有意义。你想通过这个做什么? – AnT

取出array[size]={1,3,6,8,12,13,16};。你不能在声明后初始化数组的值。但只在减速时。正确的代码是

int array[]={1,3,6,8,12,13,16}; 

另外声明尺寸宏恒定。我认为它更好。它会看起来像

#define size 7 

一切看起来不错!

+0

谢谢。有效。但是,为什么我无法初始化数组的值,如: 'int array [size] = {1,3,6,8,12,13,16};' – oxodo

+0

因为您试图将一组值分配到单个变量数组[[size]或数组[7]中)。这就是它显示错误的原因。如果此解决方案有帮助,请检查答案是否正确谢谢 –

+0

@oxodo:“不能”是什么意思?如果'size'是一个常量,那么你*就能做到。如果'size'不是恒定的,那么你将无法做到,因为VLA不接受初始化器。你的情况是什么? – AnT

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; 

但你不得不为arraysize仔细更新初始化在一起,并确保他们是一致的。相反,你可以计算大小:

const int size = sizeof array/sizeof array[0];