2017-10-05 212 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