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的数组中的元素之一。tab

于 2012-01-08T05:52:31.157 回答
1

在这种情况下不是这样,因为只有指针是本地的,而不是结构本身,因为它们是从外部在参数中传递的tab

于 2012-01-08T05:51:53.367 回答
1

我认为您指的binsearchpage #137. 为了更好地理解代码,您需要阅读 中给出的解释page #138

@K&R

@The C Programming Language

@Second Edition

于 2012-01-08T06:00:10.793 回答