C#で、次のような配列を宣言すると、次のようになります。
int []a = {1, 2, 3, 4, 5}
これはスタックで宣言されていますか?
私が知っていることから、私はこれを行う必要があります:
int []a = new int[5]{1, 2, 3, 4, 5};
配列が参照型であることを考慮してください。
C#で、次のような配列を宣言すると、次のようになります。
int []a = {1, 2, 3, 4, 5}
これはスタックで宣言されていますか?
私が知っていることから、私はこれを行う必要があります:
int []a = new int[5]{1, 2, 3, 4, 5};
配列が参照型であることを考慮してください。
これら2つの間に違いはありません。
1つ目は、いくつかのキーストロークを節約するための単なる構文糖衣(MSDN )です。
それらは両方とも(両方が同一の配列である限り)ヒープで宣言され、参照はスタックで宣言されます。スコープ外にある限り、オブジェクトは参照されず、ガベージコレクションの対象になります。
実際には、配列をスタックに格納する方法があります。
( http://www.c-sharpcorner.com/uploadfile/GemingLeader/creating-a-stack-based-array/より)
int* pArr = stackalloc int[length];
ただし、ポインターを使用するため、これには安全でないコード領域が必要です。
intは値型であるため、両方の構文がヒープで宣言します
int[] a = {1, 2, 3, 4, 5 } この構文は、他の構文をわずかに簡略化したものです