2012-01-08 19 views
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; 
} 

関数が関数内のローカル変数へのポインタを返すようです。これは、ぶら下がったポインタを返すケースではないでしょうか?

答えて

7

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

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

1

ポインタはローカルであり、構造体自体ではなく、引数tabの外側から渡されます。

1

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

@K&R

@The C Programming Language

@Second Edition

関連する問題