1

C#コードに変換しようとしているCコードがいくつかあり、慣れていないポインターに遭遇しているため、C#に相当するものがわかりません。助けてもらえますか?

ケース1:Cでこれらの3行が与えられた場合、C#でpを宣言するにはどうすればよいですか?

double snorm[169];
double *p = snorm;
*p = 1.0;

ケース2:ポインターが実際に何をしているのかわからないため、この行をC#に変更する方法がわかりません。

*(snorm+n) = *(snorm+n-1) * (double)(2*n-1) / (double)n;
4

2 に答える 2

5

初め:

double[] snorm = new double[169];
snorm[0] = 1.0;

snormの代わりに使用するよりもp

2番:

snorm[n] = snorm[n-1] * (double)(2*n-1)/(double)n;

基本的*pには、によって参照されるメモリのアドレスで値を取得することを意味しますp。ポインタをインクリメントして追加すると、メモリ内のポインタが移動するためp++、メモリ(p+1)内の次のアイテムを参照するだけでなく、メモリ内で実際に移動する距離は、ポインタが指すデータ型によって異なります。そして、*(p+n)は配列内のn番目の項目の値です(配列pを指している場合)

とにかく、ポインタに慣れておく必要があります。

于 2012-11-20T13:53:53.863 に答える
3

そのコードは基本的に、配列アクセスの代わりにポインターを使用しています。したがって、最初のスニペットは次のようになります。

double[] snorm = new double[169];
snorm[0] = 1.0;

次のビットは次と同等です。

snorm[n] = snorm[n-1] * (double)(2*n-1) / (double)n;

(もっと多くのスペースを使用しますが、明らかにそれは好みの問題です。)

唯一注意が必要なのは、何かがポインタをインクリメントする場合です。その時点で、将来の配列インデックスに追加するための追加のオフセットがあることを覚えておく必要があります。

于 2012-11-20T13:53:19.683 に答える