2016-12-12 8 views
-1

私は現在、受け入れ可能な知識ベースでASP.NETにアプローチできるように、C#を使いこなしています。これを行うために、私は時折、古いC++コードを見て、C#で動作させる方法を理解できるかどうかを確認します。C#2Dポインタ配列

私は、データを格納するかなり一般的な方法である配列を調べることにしました。私が疑問に思ったのは、ポインタを使って2次元配列を作成することに相当するC#のようなものでしょうか?

私はそれがこのようになります行うためのC++一つの方法であることを知っている

double **myArray; 

myArray = new double * [rows]; 

for(int I = 0; I < rows; I++) { 
myArray[I] = new double[cols]; 
} 

私も[COLS、行] C#で使用するだけで簡単にダブルを言うことができることを知って、それが2次元配列を作成します。私はC++とC#がポインタを別々に扱う可能性が高いことを知っていますが、関心のために、C#で同様の動作をどうやって模倣しますか?

乾杯。

+1

C#の経験則は、あなたがそうする理由がない限り、ポインタを使用しないことです。あなたはこれで何を達成しようとしていますか? – Abion47

+0

なぜ、-1、ああ、よくわからない。私の知識を増やすことを除いて、本当に何も達成しようとしていない。知識のための知識。時々、私は古いC++を、あるいは少なくとも試して、C#コードに変換しようとします。だから私はそれが可能かどうか疑問に思っていた。 – SomeStudent

答えて

1

C#の配列とC++のポインタは非常に似ていますが、最大の違いは、C#には管理されたロジックのレイヤが配列データの上にあることです。

C#でのポインタ配列が可能です。私は私の以前のコメントで言ったように推奨されてC#でポインタを使用して、しかし、

unsafe 
{ 
    double*[] ptrArray = new double*[5]; 
    ptrArray[2][0] = 4.0; 

    double*[,] ptr2DArray = new double*[5,5]; 
    ptr2DArray [2, 2][0] = 4.0; 
} 

、一般的に、あなたは、可能な限り管理アプローチを使用する:あなたがして、例えば、それを行うことができます。個人的には、ポインタの配列(2D配列はずっと少ない)を作成する必要はないと思います。誰かのプログラムがこのような構造を必要とする場合、おそらく彼らのアプローチを再考する必要があると思います。

+0

gotcha、応答のためのty。 – SomeStudent

0

通常、ポインタはC#ではあまり使用されません。ポインタをC#で使用すると、安全でないコンテキストとみなされます。

ポインタを使用する方法を示すMSDN Pointer Documentを確認してください。

私は、必要でない場合はポインタを使用しないと言いたいと思います。 Ref KeywordOut keywordを使用して、パラメータを参照として渡すことができます。

ポインタを使用すると、すべてのマネージコードの利点が失われます。

C# ref is it like a pointer in C/C++を確認できます。

それ以外のところは、値型のすべてのメンバーが含まれていても、すべての配列はすでに参照型だと思います。

C#でValue Types and Reference Typesをチェックしてください。

私はそれが役に立ちそうです。

+0

好奇心をそそらず、参照渡し時に&とrefの間に大きな違いがありますか? – SomeStudent

+0

@SomeStudentタイプとオブジェクトがCLRでどのように処理され、渡されるかには微妙な違いがありますが、実際はそうではありません。 – Abion47