gpt4 book ai didi

c - 了解特定代码示例中的指针

转载 作者:行者123 更新时间:2023-11-30 18:31:28 26 4
gpt4 key购买 nike

下面的 C 代码应该在列表末尾附加一个数字。我们有以下列表结构:

struct element
{
int value;
struct element *next;
};

以及 Append 函数的以下代码:

void append (struct element **l, int value)
{
struct element *tmp = *l;
struct element *new = (struct element *) malloc (sizeof (struct element));
new->value = value;
new->next = NULL;

if (tmp == NULL)
*l = new;
else
{
while (tmp->next != NULL)
{
tmp = tmp->next;
}
tmp->next = new;
}
}

我不明白上面代码中指针的使用,特别是,我不知道为什么 l 有时出现带有两个星号,有时带有一个星号,为什么 tmp 有时出现带有星号有时没有星号。我也不明白星号在哪里作为取消引用运算符出现以及它在哪里用于定义指针。我已经阅读了 C 中指针的介绍,但无论如何都无法理解这段代码中的指针。帮助表示赞赏。

最佳答案

这是基本的 C,但是...

  1. l 的声明是 struct element **l。 C 的工作方式意味着 **l 引用 struct element 类型的内容,因此 *l 引用 类型的内容>struct element *(指向struct element的指针)和普通的l引用一个struct element **(一个指针指向结构元素的指针)。
  2. 同样,tmp 的声明是 struct element *tmp,因此 *tmp 是一个 struct elementtmp 是指向 struct element 的指针。

指向指针的指针是必要的,以便如果新元素是列表的头部,则可以更新调用函数中的列表的头部。对*l 的赋值可确保调用函数中的变量得到更新。

关于c - 了解特定代码示例中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22569797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com