「「ビン」の引数2を渡すと、キャストせずにポインタから整数を作成する」という警告が表示されます

2020-06-01 c arguments warnings

バイナリ検索で、私はタイトルに書いた警告があります:

    #include <stdio.h>
    int bins(int, int, int, int);/*this function do a binary search*/

    int main()
    {
        int n, low, high, v[]={0,1,2,3,4,5,6,7,8,9,10};
        low=0;high=11;
        printf("please enter the num you want to find\n:");
        scanf("%d", &n);
        printf("%d", bins(n, v, low, high));
    return 0;
    }
    int bins(int n, int v[], int low, int high)
    {
        int mid;
        if(low>high)
        {
            return -1;
        }
        mid=(high+low)/2;
        if(v[mid]>n)
        {
            bins(n, v, low, high-mid);
        }
        if(v[mid]<n)
        {
            bins(n, v, low+mid, high);
        }
        return mid;
    }

アレイが編成されていることを考慮してください。

「「bins」の引数2を渡すと、キャストせずにポインタから整数を作成する」という警告が表示されます。

Answers

binsの定義の頭:

int bins(int n, int v[], int low, int high) { ...

関数のプロトタイプとは異なります。

int bins(int, int, int, int);      /*this function do a binary search*/

2番目のパラメーター定義で。

前者では、2番目のパラメーターはintへのポインター型です。 後者では、2番目のパラメーターはint型です。

不一致があります。


関数のプロトタイプの2番目のパラメーターを修正します。

int bins(int, int[], int, int);      /*this function do a binary search*/
                 |
                Here

コードは警告なしでコンパイルされます。


サイドノート:

bins()のアルゴリズムに欠陥があるようです。 mid(high+low) / 2によってのみ割り当てられるため、 nが何であっても常にmid = 5返します。

Related