Witam.
W jaki sposób deklaruje się wskaźnik na obiekt w który znajduje się w tablicy (2d).
Moje próby zakończyły się fiaskiem.
linia kodu 112
https://pastebin.com/3ncTfSxE
Witam.
W jaki sposób deklaruje się wskaźnik na obiekt w który znajduje się w tablicy (2d).
Moje próby zakończyły się fiaskiem.
linia kodu 112
https://pastebin.com/3ncTfSxE
https://docs.microsoft.com/pl-pl/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types
https://docs.microsoft.com/pl-pl/dotnet/csharp/language-reference/keywords/unsafe
Generalnie unikaj wskaźników jeżeli nie musisz :P
Kilka dni temu pisałem że tablica jest typem referencyjnym .Elementy tablicy znajdują się na zarządzanej stercie .Wskaźników możesz używać tylko
do typów wartościowych takich jak int , które znajdują się na stosie.
Do elementów tablicy możesz się odwoływać za pomocą indeksu .
Zapamiętajcie to ludzie w końcu ;)
Zimny Krawiec napisał(a):
Wskaźników możesz używać tylko do typów wartościowych takich jak int , które znajdują się na stosie.
Guzik prawda, w linku przytoczonym powyżej masz chociażby przykład pokazujący że się da, tablica typów wartościowych na stercie: ;)
int[] a = new int[5] { 10, 20, 30, 40, 50 };
// Must be in unsafe code to use interior pointers.
unsafe
{
// Must pin object on heap so that it doesn't move while using interior pointers.
fixed (int* p = &a[0])
{
// p is pinned as well as object, so create another pointer to show incrementing it.
int* p2 = p;
Console.WriteLine(*p2);
// Incrementing p2 bumps the pointer by four bytes due to its type ...
p2 += 1;
Console.WriteLine(*p2);
p2 += 1;
Console.WriteLine(*p2);
Console.WriteLine("--------");
Console.WriteLine(*p);
// Dereferencing p and incrementing changes the value of a[0] ...
*p += 1;
Console.WriteLine(*p);
*p += 1;
Console.WriteLine(*p);
}
}
Masz rację . Tak też można . Zastanawiam się gdzie to się może przydać.
Chciałem zrobić eksperyment polegający na tym że tablica zostanie usunięta ze sterty i na co będzie wskazywał wskaźnik ale nie udało mi się . Nawet wymuszałem odśmiecanie i żaden obiekt nie został usunięty, ani tablica ani inne obiekty, które utworzyłem - niezależnie od ich stopnia złożoności i wielkości .
Robiłem za każdym razem migawkę systemu na różnych etapach działania programu i nic .
OK. Doczytałem że obiekty do których odwołuje się "active pinned local variable." nie są usuwane ale dlaczego nie są usuwane inne obiekty ?