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

함수가 함수의 로컬 var에 대한 포인터를 반환하고있는 것으로 보입니다. 이것은 매달려있는 포인터를 돌려주는 경우가 아닐까요?

답변

7

아니요,이 함수는 로컬 변수에 대한 포인터를 반환하지 않습니다. 사실,이 함수에는 지역 변수 struct key이 전혀 없습니다.

이 함수는 호출자가이 함수에 제공 한 tab 배열의 struct key 요소 중 하나에 대한 포인터를 반환합니다.

1

이 경우에는 포인터가 로컬이 아니고 구조체 자체가 아니기 때문에 외부에서 인수 tab으로 전달되므로 포인터 만 로컬이므로 구조체 자체가 아닙니다.

1

page #137에 언급 된 binsearch 코드를 언급 한 것 같습니다. 코드를 더 잘 이해하려면 page #138에 제공된 설명을 읽어야합니다.

@K&R

@The C Programming Language

@Second Edition