1

Kernighan&Ritchieによる「Cプログラミング言語」で構造体を返す例に出くわしました。

/* binsearch: find word in tab[0]...tab[n-1] */
struct key *binsearch(char *word, struct key *tab, int n)
{
    int cond;
    struct key *low = &tab[0];
    struct key *high = &tab[n];
    struct key *mid;

    while (low < high) {
        mid = low + (high-low) / 2;
        if ((cond = strcmp(word, mid->word)) < 0)
            high = mid;
        else if (cond > 0)
            low = mid + 1;
        else
            return mid;
    }

    return NULL;
}

関数が関数内のローカル変数へのポインタを返しているようです。これは、ダングリングポインタを返す場合ではないでしょうか。

4

3 に答える 3

7

いいえ、この関数はローカル変数へのポインタを返しません。実際、struct keyこの関数にはタイプのローカル変数はまったくありません。

この関数は、呼び出し元によってこの関数に提供された配列struct keyから要素の1つへのポインターを返します。tab

于 2012-01-08T05:52:31.157 に答える
1

この場合ではなく、引数で外部から渡されるため、構造体自体ではなく、ポインタのみがローカルであるためtabです。

于 2012-01-08T05:51:53.367 に答える
1

binsearchで言及されているコードを参照していると思いますpage #137。コードをよりよく理解するには、 の説明を読む必要がありますpage #138

@K&R

@The C Programming Language

@Second Edition

于 2012-01-08T06:00:10.793 に答える