返回指向结构的指针

时间:2012-01-08 05:50:32

标签: c kernighan-and-ritchie

我遇到一个例子,由Kernighan& amp;返回'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;
}

似乎该函数返回一个指向函数中局部变量的指针;这不是一个返回悬空指针的情况吗?

3 个答案:

答案 0 :(得分:7)

不,此函数不返回指向局部变量的指针。事实上,在这个函数中根本没有struct key类型的局部变量。

此函数返回指向其调用者提供给此函数的struct key数组中的tab个元素之一的指针。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我认为您指的是binsearch中提到的page #137代码。为了更好地理解代码,您需要阅读page #138中给出的解释。

@K&R

@The C Programming Language

@Second Edition