W C, można określić wskaźnik na tablicę jak poniżej:Stosując wskaźnik do tablicy w niebezpiecznym C#
char b1[SOME_SIZE];
char (*b3)[3]=(char(*)[3])b1;
tak, że b3[i][j] == b1[i*3+j]
.
Czy mogę zadeklarować taki wskaźnik, b3
, w unsafe
C#?
Moją intencją jest, aby dostęp do kanałów bitmap jako:
///...
unsafe {
//...
byte *target; //8bpp
byte (*source)[3]; //24bpp
//...
target[x]=(source[x][0]+source[x][1]+source[x][2])/3;
//...
mam nadzieję w ten sposób, przy użyciu source[x][ch]
zamiast source[x*3+ch]
trochę optymalizacji kompilatora.
optymalizacja Nadzieja na bazie nie ma żadnego sensu naprawdę. Możesz utworzyć wskaźnik 'byte * []', ale prawdopodobnie nie jest to coś, co masz zamiar mieć - [zobacz w dokumentach] (http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx). – BartoszKP
@BartoszKP Może masz rację, prawdopodobnie nadmiernie optymalizuję! Chodzi mi o to, że w języku C/C++ dobrze wykonane deklaracje dają często lepszą wydajność (i czytelność) w stosunku do ciężkiego kodu, ponieważ kompilator może zoptymalizować poprzednie, ale nie drugie. –
W języku C# [this] (http://stackoverflow.com/a/1563170/2642204) jest zalecanym sposobem pracy z bitmapami pod względem wydajności. – BartoszKP