定义数组时出错

时间:2017-10-18 16:55:29

标签: c function binary-search

我想在标题中介绍一个二进制搜索功能到我的程序。但是继续得到两个错误我不知道如何解决。

这是我为我的代码获得的编译错误:

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

      }

2 个答案:

答案 0 :(得分:1)

删除array[size]={1,3,6,8,12,13,16};。声明后,您无法将值初始化为数组。但只是在减速时。正确的代码是

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

同时将size声明为宏常量。我认为它更好。它看起来像

#define size 7

其他一切看起来都不错!!

答案 1 :(得分:0)

int search, size=7, array[size], middle;

您已在此定义了数组对象array。请注意,大小不是常量,因此这是一个VLA(可变长度数组)。并非所有编译器都支持VLA,而且您在这里不需要。

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

这有几种错误。

array[size]将是array的元素7 - 但array只有0到6的元素。

你显然是要将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};

由于您已使用7个元素初始化array,因此您不必告诉编译器它有多少元素;大小是自动确定的。 (这是C将为你做的少数几件事之一。)

现在你可以定义

const int size = 7;

但是您必须仔细更新arraysize的初始值设定项,并确保它们保持一致。相反,您可以计算尺寸:

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