【发布时间】:2016-02-10 21:43:42
【问题描述】:
在我大学的 C 编程课上,教授和她写的后续书籍在提到 C 中的指针时使用了call or pass by reference这个术语。
我的教授认为是“引用函数调用”的示例:
int sum(int *a, int *b);
我的教授认为是“按值函数调用”的示例:
int sum(int a, int b);
我 read C 不支持引用调用。据我了解,指针按值传递。
基本上,说指针是 C 的引用传递方式是否不正确?说您不能在 C 中通过引用传递但可以使用指针作为替代方案会更正确吗?
2015 年 11 月 11 日更新
从我提出问题的方式来看,我相信术语的争论已经开始,事实上我看到了两个具体的区别。
- pass-by-reference(目前主要使用的术语):在 C++ 等语言中使用的特定术语
- pass-by-reference(我的教授用作解释指针范式的术语):在开发 C++ 等语言之前使用的通用术语,因此在重写该术语之前
阅读@Haris 的更新答案后,为什么这不是那么黑白分明是有道理的。
【问题讨论】:
-
“说你不能在 C 中通过引用传递,但可以使用指针作为替代,这样会更正确吗?” 作为一个不写 C 但谁经常解释 pass-by-value 和 pass-by-reference 之间的区别:是的。我发现关于这个主题的维基百科文章非常好:en.wikipedia.org/wiki/Evaluation_strategy。
-
C 是按值传递。就 C 的范例而言,通过引用传递并没有真正的意义。
-
我的猜测是你的教授在没有太多语言的时候学习了 C,并且对 按引用传递 的确切含义进行挑剔不是问题。想一想:您计算机的 CPU 不支持“按引用传递”,这是为了让人类更容易而发明的。
-
@Panzercrisis “...不是对正在发生的事情的字面描述。” - 我认为情况正好相反:创建一个指向某个变量的指针,然后传递该指针是 exactly 最终通过引用调用所做的。因此,为了说明值和引用之间的区别,C 示例运行良好。您必须自己处理引用和取消引用,因为语言 C 是按值调用的,其中 C++ 在编译器中向您隐藏了那部分样板代码。
-
@Insane “从以前学习 Java(没有引用调用)” ...当您在函数中改变传递的对象时会发生什么?
标签: c pointers pass-by-reference