Programmering i C# 9. Pekare och osäker kod
Pekare och osäker kod En pekare är en variabel som innehåller en minnesadress Används mycket i C/C++ men ersätts i C# av referenser Kan användas undantagsvis i C# unsafe { int x = 5; int* p = &x; *p = 10; } Programmering i C# - Kapitel 9
Unsafe Kodblock där pekare ska användas markeras unsafe Operatorn & returnerar adress till variabel Tecknet * deklarerar en pekartyp Operatorn * avrefererar en pekare Operatorn -> väljer medlem via pekare Operatorn [] ger offset och avreferering Programmering i C# - Kapitel 9
Pekare till struct Adress kan tas till struct på stack Adress kan också tas till struct som ingår i klassobjekt Finns ju då på heap och hanteras av VES Objektet måste vara låst med fixed class MyClass { public MyStruct s; … } MyClass obj = new MyClass(); fixed (MyStruct* p = &(obj.s)) { // använd p … } Programmering i C# - Kapitel 9
Pekare för vektorer Ett ändamål för pekare är snabb traversering av vektorer Nu menas inte Array-objekt Indexoperatorn, pekararitmetik och operatorn stackalloc stackalloc möjliggör allokering av sammanhängande minne på stack Returnerar en pekare till minnet Programmering i C# - Kapitel 9
Vektor på stack Minne kan inte allokeras unsafe på heap double *p, *arr = stackalloc double[100]; for (p = arr; p < arr + 100; p++) *p = 0; // kan också användas med index: for (int i = 0; i < 100; i++) arr[i] = 0; Minne kan inte allokeras unsafe på heap Pekare kan inte tas till klassobjekt Operatorn sizeof ger objekts storlek i bytes, operanden är typnamn Programmering i C# - Kapitel 9