質問

私は神経ネットワークを学んでいるだけで、ニューロンのコンストラクターに染色体となる配列のセクションへのポインターを受け取らせたいと思います。このようなもの:

public int* ChromosomeSection;

public Neuron(int* chromosomeSection)
{
    ChromosomeSection = chromosomeSection;
}

それで、私はこのようなもので私のニューロンを作成します:

int[] Chromosome = new int[neuronsCount * neuronDataSize];

for (int n = 0; n < Chromosome.Length; n += neuronDataSize)
{
    AddNeuron(new Neuron(Chromosome + n));
}

これをC#で行うことは可能ですか? C#が安全でないコードをサポートしていることはわかっています。しかし、私はコンパイラにラインを伝える方法がわかりません public Neuron(int* chromosomeSection) 安全ではありません。

また、C ++またはCで行うすべての操作を行うことができますか?このようにし始める前に、私が知っておくべきゴッチャはありますか?以前にC#で安全でないコードを使用したことはありません。

役に立ちましたか?

解決

エリック・リパート 素敵な2部構成のシリーズがあります: 参照とポインター、パート1「マネージドポインター」の実装(参照とポインター、パート2).

複雑なポインター操作コードをCからC#に翻訳していたときに、これがホイップされた便利なタイプです。アレイの内部に安全な「管理されたポインター」を作ることができます。管理されていないポインターで行うことができるすべての操作を取得します。オフセットとしてアレイへのオフセットとして再参照し、追加と減算を行い、平等または不平等の2つのポインターを比較し、ヌルポインターを表します。しかし、対応する安全でないコードとは異なり、このコードはガベージコレクターを台無しにすることはなく、愚かなことをする場合、さまざまな配列と内部の2つのポインターを比較しようとするような愚かなことをする場合、主張します。 (*) 楽しみ!

それが役に立てば幸い。

他のヒント

使用できるように聞こえます ArraySegment<int> あなたがやろうとしていることのために。

ArraySegmentは、その配列内のさまざまな要素を区切る配列の周りのラッパーです。複数のArraysegmentインスタンスは、同じ元の配列を参照してオーバーラップできます。

配列プロパティは、配列のコピーではなく、元の配列全体を返します。したがって、配列プロパティによって返される配列に加えられた変更は、元の配列に行われます。

はい、これはC#で完全に可能ですが、単独でのポインターはこの方法でそれを使用するのに十分な情報ではありませんが、int32長さパラメーターも必要です。これは、C ++のバックグラウンドから来た場合は馴染みがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top