の配列へのポインタを使用して、私はこのような配列へのポインタを定義することができる:Cで安全でないC#
char b1[SOME_SIZE];
char (*b3)[3]=(char(*)[3])b1;
b3[i][j] == b1[i*3+j]
ようになっています。
このようなポインタb3
をunsafe
C#で宣言できますか?
私の意図として、ビットマップチャンネルにアクセスすることです:私はいくつかのコンパイラの最適化を得るために、代わりにsource[x*3+ch]
のsource[x][ch]
を使用して、このように願っています
///...
unsafe {
//...
byte *target; //8bpp
byte (*source)[3]; //24bpp
//...
target[x]=(source[x][0]+source[x][1]+source[x][2])/3;
//...
。
ホープ・ベースの最適化はどんな意味がありません。本当に。あなたは 'byte * [] 'というポインタを作ることができますが、それはおそらくあなたが持っているつもりではないでしょう - [docsで見る](http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx)。 – BartoszKP
@BartoszKPあなたが正しいかもしれませんが、私はおそらく最適化しすぎです!私の指摘は、C/C++では、コンパイラが前者を最適化することができるが、後者を最適化することができないため、よく作られた宣言は、しばしば重いコードに対してより良い性能(および判読性)を与えることである。 –
C#[this](http://stackoverflow.com/a/1563170/2642204)では、パフォーマンス面でビットマップを操作するための推奨される方法です。 – BartoszKP