C 是通过值还是引用传递对象?

新手上路,请多包涵

一个简单的问题,我在这里找不到答案。

我的理解是,在调用期间将参数传递给函数时,例如

void myFunction(type myVariable)
{
}

void main()
{
    myFunction(myVariable);
}

对于简单的数据类型,如 intfloat 等,该函数按值调用。

但是如果 myVariable 是一个数组,则只传递起始地址(即使我们的函数是按值调用的函数)。

如果 myVariable 是一个对象,也只传递对象的地址,而不是创建一个副本并传递它。

所以回到这个问题。 C++ 是通过引用还是值传递对象?

原文由 user3041058 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 695
2 个回答

参数按值传递,除非函数签名另有说明:

  • void foo(type arg) , arg 中,不管 type 是简单类型、指针类型还是类类型,都是按值传递的,
  • void foo(type& arg)arg 通过引用传递。

对于数组,传递的值是指向数组第一个元素的指针。如果您在编译时知道数组的大小,也可以通过引用传递数组: void foo(type (&arg)[10])

原文由 Oswald 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 C++ 中,声明为类、结构或联合的类型被视为“类类型”。这些是按值传递的,或者您可以说使用复制构造函数的副本传递给函数。当我们实现二叉树时,这一点非常明显,其中在递归函数中几乎总是有一个 Node * 类型的参数作用于二叉树。这是为了便于修改该节点。如果节点按原样传递(即不是指针类型),则对节点的修改将是本地副本。即使在向量的情况下,在传递向量的副本时也会将其传递给函数,以避免我们使用引用 &。

原文由 Piyush Kundnani 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题