2012-09-19 49 views
0

可能重复:
Are arrays or lists passed by default by reference in c#?当参数是数组时,参数的大小是多少?

在我的机器的指针是32位,因此一个功能,通过一个类对象将被传递32个比特(该指针是参照类对象)。我一直听到关于数组的尖锐矛盾的事情,他们是引用类型,并且它们是按值传递的。那么有人能告诉我有多少位传递一个数组的浮点数将传递该数组?它是一个指针的大小,还是5 * 32大小的浮点数?

+0

http://stackoverflow.com/questions/967402/are-arrays-or-lists-passed-by-default-by-reference-in-c,http://stackoverflow.com/questions/11977988/why -are-objects-by-value-modified-as-if-they-are-by-reference,http://stackoverflow.com/questions/4617306/c-sharp-constructor-object-parameter-is通过引用或价值,http://stackoverflow.com/questions/967402/are-arrays-or-lists-passed-by-default-by-reference-in-c(等 - 你能投票结束你自己的*问题作为重复?因为,如果是的话,选择一些东西..) – 2012-09-19 04:19:49

回答

2

数组是参考类型,因此它只传递参考,而不是所有的值。

Passing Arrays as Arguments (C# Programming Guide)

阵列可以作为参数方法参数传递。因为数组 是引用类型,该方法可以更改的元素

的价值,您可能会看到此文章由Jon飞碟双向:Parameter passing in C#

+0

但[可能]令人困惑的事情是,“参考”是通过值传递..(所以它是“通过价值调用[参考]“或更简单地”通过对象共享调用“) – 2012-09-19 04:17:54

+0

@pst,引用总是按值传递,不是吗? – Habib

+0

我从来没有说过它不是。然而,它经常与“通过引用调用”混淆,愚蠢的重载条款,并因此导致混淆,如果它没有明确说明*(例如“[数组]通过值”),因为它的价值.. ..并在其上。 – 2012-09-19 04:21:08

1

所有的数组都是引用类型:

引述MSDN

数组类型是从抽象基类型派生的参考类型 数组。由于此类型实现IEnumerable和IEnumerable,因此您可以在C#中的所有数组上使用foreach迭代。

因此,将一个数组传递给一个函数会传递一个引用,不管数组中有多少元素,引用的大小都是相同的。在你的例子中,这将是32位。

1

阵列是引用类型和每个参考是4个字节(32位系统)或8个字节(64位系统)大。作为参考,对于大小只是将其长度乘以参考大小并添加类定义开销(变量的几个字节和内存管理的几个字节)。

相关问题