返回指向结构体的指针

发布于 2024-12-25 09:49:35 字数 605 浏览 0 评论 0原文

我在 Kernighan & 的“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;
}

看起来该函数正在返回一个指向函数中局部变量的指针;这不是返回悬空指针的情况吗?

I came across a example returning a struct in 'C Programming Language' by Kernighan & Ritchie.

/* 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;
}

It seems that the function is returning a pointer to a local var in the function; wouldn't this be a case of returning a dangling pointer?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

近箐 2025-01-01 09:49:35

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

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

No, this function does not return a pointer to a local variable. There are, in fact, no local variables of type struct key in this function at all.

This function returns a pointer to one of the struct key elements from the tab array provided to this function by its caller.

澉约 2025-01-01 09:49:35

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

Not in this case, since only the pointers are local, not the structs themselves, as they are passed from outside in the argument tab.

嗳卜坏 2025-01-01 09:49:35

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

@K&R

@C 编程语言

@第二版

I think you are referring to the binsearch code mentioned in page #137. To get better understanding of the code, you need to read the explanation given in page #138.

@K&R

@The C Programming Language

@Second Edition

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文