2

C#で、次のような配列を宣言すると、次のようになります。

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

これはスタックで宣言されていますか?

私が知っていることから、私はこれを行う必要があります:

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

配列が参照型であることを考慮してください。

4

3 に答える 3

6

これら2つの間に違いはありません。

1つ目は、いくつかのキーストロークを節約するための単なる構文糖衣(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 に答える