为什么数组通过引用传递,但struct在C中隐式传递值?

时间:2012-06-01 03:08:51

标签: objective-c c linux

为什么他们这样设计?我很困惑。

更新:我真的想知道问题的答案。我用Google搜索,但我找不到任何有用的东西。

我认为可能有两个原因:

一个:技术性。也许编译器很难实现(struct by reference)。如果答案是这个。请解释一下。

两个:适合使用(编程)。我认为,如果struct通过引用传递,它会更优雅(或更漂亮?)我找不到一些显示优势的例子(strut pass by value)。我的编程生涯不是很长。在实践中,我更喜欢将struct作为指针传递给函数(指针在堆栈上占用较少的空间)。

2 个答案:

答案 0 :(得分:-1)

您可以将数组想象为包含连续内存位置的集合,其中数组的名称是指向该集合的第一个内存地址的指针。

所以现在应该很明显,当你通过它的名字传递数组时,你实际上是在传递该内存地址的副本。

结构是一组对象,因此当您传递结构名称时,您将传递该组中对象的副本。

PS:这是一个非常基本的C概念和明显的疑问,更好地阅读一本好的C书来进一步明确你的概念。

答案 1 :(得分:-2)

数组传递,实际上是按值传递地址。在c中,没有通过引用传递。

我认为没有传递数组整个值的原因是

首先,表现。

其次,由于我们可以将指针用作数组,编译器无法知道指针所指向的内存大小,因此无法将数组中的所有值传递给函数。 C绝对可以设计成知道数组的确切大小,并传递数组的值。但是,我们不能以数组的方式使用指针,我们不能使用任何malloc数组。