Wskaźnik do elementu tablicy

0

Potrzebuje stworzyć wskaźnik do elementu tablicy składającej się ze struktur. Próbowałem:

struct test1 {
      int p;
}

class klasa1 {
     test1[] test = new test1[10];

     void funkcja() {
       test1* t = &test[1];
       t->p =10;
     }
}

Ale już przy "test1[] test = new test1[10];" wywala mi błąd:

Cannot take the address of, get the size of, or declare a pointer to a managed type ('Analizer.TDEC')

oraz

Cannot apply indexing with [] to an expression of type 'Analizer.TDEC'

Potrzebuje zapisać w 2 miejscach liczbę za jednym razem. Nie chce podwójnego przypisania typu t = test[1] = 10;
Jeśli moje metoda nie jest do zrealizowania, a znacie jakieś inny sposób rozwiązania mojego problemu to podajcie go.

0

w C# operowanie na wskanzikach jest żywo odradzane, chyba ze nie masz wyjscia albo ze bardzo dokladnie wiedz co robisz..

ogolnie, błędowi chodzi o to, że tablica jest OBIEKTEM więc podlega pod GC, wiec nie mozesz ot tak sobie brac do nej wskaznikow i robic co chcesz..

generalnie, po pierwsze, jesli chcesz uzywac w ogole wskaznikow, oswój się ze słowem kluczowym unsafe -> http://msdn.microsoft.com/en-us/library/chfa2zb8(v=vs.71).aspx

po drugie, aby móc operować na wskaznikach na obiekty zarządzane, musisz je wpierw "przypiąć", tzn. poinformowac GC, że aż do odwołania nie ma on prawa przenosić tych bloków pamięci w inne miejsce, patrz np. słowo fixed -> http://msdn.microsoft.com/en-us/library/f58wzh21(v=vs.80).aspx

tutaj masz artykul ktory wyglada na pierwszy rzut oka calkiem w porzadku http://www.c-sharpcorner.com/UploadFile/rajeshvs/PointersInCSharp11112005051624AM/PointersInCSharp.aspx

2

Rozumiem że kolega przestawia się z C/C++ na C# i stąd takie dziwne próby.
Generalnie w C# masz value type przekazywane przez wartość oraz reference type przekazywane przez referencje. Struktury należą do value type. Dlaczego chcesz użyć struktur? Użyj klas zamianst struktur.

class test1 {
      int p;
}
 
class klasa1 {
     test1[] test = new test1[10];
 
     void funkcja() {
       test1 t = test[1];
       t.p =10; // obrazowo zmiana nastąpiła w t oraz w test[1], bo to są referencje do tego samego obiektu, miejsca w pamięci
     }
}

Jeśli napiszesz coś więcej o całym swoim programie będziemy mogli lepiej pomóc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1