【发布时间】:2021-09-17 05:34:31
【问题描述】:
在 C(不是 C++)中
有什么区别:
function(int &a)
{
a = a + 2;
}
和:
function(int *a)
{
*a = *a + 2;
}
据我了解,它们是一样的吗?
如果有差异,你能举例说明吗?
【问题讨论】:
-
int &a不是标准的 C 代码。它是 C++。你在学习 C 还是 C++?如果你正在学习C,答案是不要使用int &a;这是无效的。如果您正在学习 C++,有人可能会写一个讨论引用和指针之间差异的答案。选择一种语言,删除另一种语言的标签,然后编辑问题和标题以阐明您所询问的语言。 -
第二种形式使用指针。第一种形式使用引用,这是一个 C++(不是 C)特性。考虑引用的一种方法是它们是一种受限形式的指针。
-
在 OP 澄清他们是在询问 C 还是 C++ 之前,不应将其作为重复项关闭。如果他们问的是 C,正如他们所指出的,这不是 C++ 问题的重复。
-
两者的最终效果是相同的,但参考版本是首选,因为没有人可以意外设置对 null 的引用 function(int *a) { a = NULL ; *a = *a + 2; // 崩溃 }
-
@user3386109:当我们不知道 OP 的意图时,删除 C 标签是不合适的。 OP 可能正在学习 C,但被他们遇到的一些 C++ 代码弄糊涂了,在这种情况下,这是一个 C 问题,应该有一个 C 标签,并且应该回答这不是有效的 C 代码。
标签: c reference dereference