Che cos'è un puntatore?
In tutte le lingue, un puntatore è un tipo di variabile che memorizza un indirizzo di memoria e puoi chiedere loro di dirti l' indirizzo a cui stanno puntando o il valore all'indirizzo a cui stanno puntando.
Un puntatore può essere pensato come una sorta di segno di libro. Tranne, invece di essere utilizzato per saltare rapidamente a una pagina di un libro, viene utilizzato un puntatore per tenere traccia o mappare i blocchi di memoria.
Immagina la memoria del tuo programma esattamente come un grande array di 65535 byte.
I puntatori indicano obbedientemente
I puntatori ricordano ciascuno un indirizzo di memoria e quindi puntano ciascuno a un singolo indirizzo in memoria.
Come gruppo, i puntatori ricordano e richiamano gli indirizzi di memoria, obbedendo a ogni comando fino alla nausea.
Sei il loro re.
Puntatori in C #
Nello specifico in C #, un puntatore è una variabile intera che memorizza un indirizzo di memoria compreso tra 0 e 65534.
Anche specifici per C #, i puntatori sono di tipo int e quindi firmati.
Tuttavia, non è possibile utilizzare indirizzi con numero negativo, né è possibile accedere a un indirizzo superiore a 65534. Qualsiasi tentativo in tal senso genererà un'eccezione System.AccessViolationException.
Un puntatore chiamato MyPointer è dichiarato così:
int * MyPointer;
Un puntatore in C # è un int, ma gli indirizzi di memoria in C # iniziano da 0 e si estendono fino a 65534.
Le cose appuntite dovrebbero essere gestite con particolare attenzione
La parola non sicuro è destinato a spaventare voi, e per una buona ragione: I puntatori sono cose appuntite, e le cose appuntite ad esempio spade, asce, puntatori, ecc dovrebbero essere trattati con particolare attenzione.
I puntatori danno al programmatore il controllo stretto di un sistema. Pertanto è probabile che gli errori commessi abbiano conseguenze più serie.
Per utilizzare i puntatori, è necessario abilitare il codice non sicuro nelle proprietà del programma e i puntatori devono essere utilizzati esclusivamente in metodi o blocchi contrassegnati come non sicuri.
Esempio di un blocco non sicuro
unsafe
{
// Place code carefully and responsibly here.
}
Come usare i puntatori
Quando le variabili o gli oggetti vengono dichiarati o istanziati, vengono memorizzati.
- Dichiarare un puntatore usando il prefisso simbolo *.
int *MyPointer;
- Per ottenere l'indirizzo di una variabile, utilizzare il prefisso & symbol.
MyPointer = &MyVariable;
Una volta assegnato un indirizzo a un puntatore, si applica quanto segue:
- Senza * prefisso per fare riferimento all'indirizzo di memoria indicato come int.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- Con il prefisso * per ottenere il valore memorizzato all'indirizzo di memoria indicato.
"MyPointer is pointing at " + *MyPointer;
Poiché un puntatore è una variabile che contiene un indirizzo di memoria, questo indirizzo di memoria può essere memorizzato in una variabile puntatore.
Esempio di puntatori usati con cura e responsabilità
public unsafe void PointerTest()
{
int x = 100; // Create a variable named x
int *MyPointer = &x; // Store the address of variable named x into the pointer named MyPointer
textBox1.Text = ((int)MyPointer).ToString(); // Displays the memory address stored in pointer named MyPointer
textBox2.Text = (*MyPointer).ToString(); // Displays the value of the variable named x via the pointer named MyPointer.
}
Si noti che il tipo di puntatore è un int. Questo perché C # interpreta gli indirizzi di memoria come numeri interi (int).
Perché è int invece di uint?
Non c'è una buona ragione.
Perché usare i puntatori?
I puntatori sono molto divertenti. Con gran parte del computer controllato dalla memoria, i puntatori consentono a un programmatore un maggiore controllo della memoria del proprio programma.
Monitoraggio della memoria.
Utilizzare i puntatori per leggere i blocchi di memoria e monitorare come i valori puntati cambiano nel tempo.
Modifica questi valori in modo responsabile e tieni traccia di come le modifiche influiscono sul tuo computer.