Un puntatore è una variabile che invece di contenere un valore contiene l’indirizzo di memoria di un’altra variabile.
I puntatori si dichiarano così:
tipo *nome;
Per ricavare l’indirizzo di una variabile esistente, invece, si utilizza l’operatore &.
Facciamo un esempio:
int v = 10;
int *p = &v;
Nella prima riga dichiariamo una normale variabile, nella seconda dichiariamo un puntatore che punta all’indirizzo di v.
L’operatore * serve anche a leggere il valore contenuto nella variabile puntata dal puntatore.
Ad esempio, continuando l’esempio precendente:
int b = *p;
Farebbe si che nella variabile b ci sia il valore 10, ossia il valore della variabile puntata da p: v.
Il concetto dei puntatori non è molto semplice, quindi per maggiori informazioni si rimanda ad una qualsiasi guida completa sul loro utilizzo.
Ora però veniamo al dunque, cioè come si implementano questi puntatori in C#. In linguaggi come C e C++ è sempre possibile usare puntatori nei programmi, questo non è vero per il C#. Quest’ultimo linguaggio, infatti, non permette l’uso di codice potenzialmente insicuro quali sono i puntatori, quindi per poterli inserire è necessario utilizzare la parola chiave unsafe.
Un semplice esempio:
using System;
class Test {
public static vodi Main(string[] args)
{
int v = 4;
unsafe {
int *p = &v;
*p += 5;
}
Console.WriteLine(v); //9
}
}


