2017-10-05 215 views
-4
// RecursiveBinarySearch.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#define N 9 

int RecursiveBinarySearch(int A, int low, int high, int x); 

int main() 
{ 
    int A[N]; 
    int index = 0; 
    //Put 
    A[0] = 2; 
    A[1] = 6; 
    A[2] = 13; 
    A[3] = 21; 
    A[4] = 36; 
    A[5] = 47; 
    A[6] = 63; 
    A[7] = 81; 
    A[8] = 97; 

    printf("Elements in Array A\n"); 

    while (index <= 8) { 
     printf("%d ", A[index]); 
     index++; 
    } 

    printf("\nLocation(index) of element 63\n"); 

    printf("%d", RecursiveBinarySearch(A, 0, 8, 63)); 

    return 0; 
} 


int RecursiveBinarySearch(int A, int low, int high, int x) { 

    //Base Condition 
    if (low > high) 
     return -1; 

    int mid = low + (high - low)/2; 

    if (x == A[mid]) 
     return mid; 
    else if (x < A[mid]) 
     return RecursiveBinarySearch(A, low, mid - 1, x); 
    else 
     return RecursiveBinarySearch(A, mid + 1, high, x); 

} 

这是第一个问题。 Visual Studio中说 INT A [9] 参数类型是 “int *” 是类型为 “INT”递归二进制搜索c

这里的第二个问题的参数不兼容。 int mid 表达式必须有指针对象类型

我不太了解指针,所以我想知道为什么这段代码无法编译以及如何在此代码中使用指针。

+2

请花时间阅读关于C的一本好书。数组(int []')与单个int不一样,所以当你传递一个数组的时候你期望什么,你的函数只需要一个值? –

+2

将参数A的声明更改为'int * A' –

+0

(包含行号的错误消息时,请在报价单中包含该数字。当您提及包含在您的文章中的代码中的项目时,如果您制作它们更容易阅读使用“反引号”脱颖而出:'int A [9]','int mid'v) – greybeard

回答

2

更好除去所有assignements A[0] = ..., A[1] = ...产品总数和写入:

int A[] = {2,6,13,21,36,47,63,81,97} 

而更换

while (index <= 8) 

由:

while (index < sizeof(A)/sizeof(A[0])) 

sizeof(A)/sizeof(A[0])是如果数组A元件的数量。 sizeof(A)是整个数组的字节大小,sizeof(A[0])是数组中一个元素的大小(以字节为单位)。


但真正的问题是在这里:

替换:

int RecursiveBinarySearch(int A, int low, int high, int x) 

通过

int RecursiveBinarySearch(int A[], int low, int high, int x) 

可能会有更多的错误,但。

1

开始拍摄的编译器警告严重:

helpPointer.c: In function ‘main’: 
helpPointer.c:30:40: warning: passing argument 1 of ‘RecursiveBinarySearch’ makes integer from pointer without a cast [-Wint-conversion] 
    printf("%d", RecursiveBinarySearch(A, 0, 8, 63)); 
             ^
helpPointer.c:4:5: note: expected ‘int’ but argument is of type ‘int *’ 
int RecursiveBinarySearch(int A, int low, int high, int x); 
    ^~~~~~~~~~~~~~~~~~~~~ 

正如指出人们在评论已经,你传递一个数组递归二进制搜索方法,所以你应该改变RecursiveBinarySearch这样的:

int RecursiveBinarySearch(int A[], int low, int high, int x); 

或者

int RecursiveBinarySearch(int *A, int low, int high, int x); 

哪些是同一个东西,SI nce数组名只是一个指向数组的第一个元素的指针。如果对数组和指针之间的关系没有多少了解,请阅读this