2

在 C# 中,当我声明一个这样的数组时:

int []a = {1, 2, 3, 4, 5}

这是在堆栈中声明的吗?

据我所知,我应该这样做:

int []a = new int[5]{1, 2, 3, 4, 5};

考虑到数组是引用类型。

4

3 回答 3

6

这两者之间没有区别。

第一个只是一个语法糖 ( MSDN ) 来保存几个击键。

它们都(只要它们是相同的数组)都在堆中声明,并且引用在堆栈中声明。因此,只要您超出范围-对象就会变得未被引用并且有资格被垃圾收集。

于 2012-07-13T00:07:31.610 回答
5

实际上有一种方法可以将数组存储在堆栈中:

(来自http://www.c-sharpcorner.com/uploadfile/GemingLeader/creating-a-stack-based-array/

int* pArr = stackalloc int[length];

但这需要一个不安全的代码区域,因为使用了指针。

于 2012-07-13T00:14:08.860 回答
0

你们两种语法都将在堆上声明,因为 int 是值类型

int[] a = {1, 2, 3, 4, 5 } 这种语法是另一种语法的简写

于 2012-07-13T00:16:57.640 回答