【发布时间】:2020-06-04 22:32:03
【问题描述】:
我正在用 C 语言创建一个带有链表的程序。我在 main 函数中创建了一个 head 变量。然后我通过引用函数insert_at_head(struct node **head) 传递它。
我还有另一个在尾部插入的功能。在基本条件下,如果我的列表为空,我想再次调用insert_at_head(struct node **head)。但是我在传递实际参数时感到困惑。应该是insert_at_head (&(*head)) 还是insert_at_head (head)?
就个人而言,我认为两者是相同的,因为它们都传递了一个双指针。我应该使用哪一个?
【问题讨论】:
-
insert_at_head(head) -
假设在你调用
insert_at_head的函数中有struct node *head;(即head是一个单个指针)那么你应该调用insert_at_head(&head)。在调用函数中没有取消引用head。没有minimal reproducible example 这是我的猜测。 -
我尝试使用一个简单的程序来增加数字的值。两种格式都正确地增加了值。我认为他们两个都应该工作。 ide.codingblocks.com/s/182435
-
在功能上它们是一样的,你可以将各种括号和
&和*组合在一起,然后编译并运行。没有必要在这里添加任何内容。如果head是struct node**类型并且您有一个接受struct node**类型的函数,则只需传递head。它是最简单、最简洁、最清晰的代码。任何额外的东西,虽然仍然有效,但不是最佳实践,并且会在代码审查时引起一些注意。
标签: c pointers linked-list parameter-passing