【发布时间】:2014-07-25 23:27:27
【问题描述】:
我正在学习 C。当我遇到分段错误时,我正在编写代码来创建一个链表。我在this question 中找到了我的问题的解决方案。 我试图通过引用传递一个指针。解决方案说我们不能这样做。我们必须将指针传递给指针。这个解决方案对我有用。 但是,我不明白为什么会这样。谁能说出原因?
【问题讨论】:
-
因为 C 中没有引用。您需要说明 C 中没有引用的原因吗?
-
该语言不支持通过引用传递对象。就这么简单。
-
在 C 中,everything 都是按值传递的(我几乎可以闻到火焰喷射器因该语句而升温)。如果你想有一个调用方可修改的参数,你传递的“值”必须是要修改的东西的地址,并且形式参数必须声明为指向该类型的指针(即使它是指针,在这种情况下,它将是一个指向指针的指针)。即使数组也是按值传递的,它只是按照数组的标准发生“值”,因为表达式是其第一个元素的地址。但它仍然是一个值(不可否认,它可以让您访问调用者变量)。
-
也许这篇文章也能帮助你理解:stackoverflow.com/questions/23963269/… 基本上,为了操纵指针指向的位置,你必须有它的地址。对象的地址是指向对象的指针。因此,传递指针的地址(即:指向指针的指针)将允许被调用函数更改指针指向的位置。
-
在 C++ 中,“引用”也是一个指针,只是对外部不可见。因此,如果您在 C 中传递一个指针(或者在您的情况下是指向指针的指针),它与在 C++ 中传递引用的代码相同,只是语法不同。
标签: c pointers pass-by-reference