cpp2html 0.1-alpha © 2002 Andrea Leofreddi. To get the source click here

// 3.2: Puntatori
#include <iostream>

using namespace std;

int main() {
	int a(10);
	int *b;
	int *c;

	cout << a << endl;
	b = &a; // adesso b punta ad a
	cout << *b << endl;

	// accedere a *c, porterebbe un errore, poiche' c non e' stato
	// inizializzato (contiene dati casuali)
	
	c = NULL;
	// per NULL si intende il puntatore 0x0, ovvero allo 0. NULL e' usato
	// per riportare appunto che il puntatore e' vuoto.

	// una cast implicita che il compilatore assume, e' che ogni array
	// se invocato per nome e' implicitamente convertito a puntatore (e
	// viceversa). Per esempio
	int array[] = { 9, 8, 7, 6 };

	// per ottenere il primo elemento (9), potremmo usare sia
	// array[0] (indice nell'array)
	// oppure assumere che array sia implicitamente convertito a
	// &array[0]
	// e quindi utilizzare
	// *array
	
	// L'aritmetica dei puntatori ci permette di eseguire, data la sintassi
	// pointer + n
	// dove n appartiene a Z
	// uno spostamento in memoria pari alla grandezza del tipo di pointer
	// per n. Ad esempio:
	int *ptr1, *ptr2;
	ptr1 = &array[0]; // punta al primo elemento nell'array
	ptr2 = &array[2]; // punta al terzo elemento nell'array
	int diff = (unsigned)ptr2 - (unsigned)ptr1; // diff, che e' un intero, e' uguale a 8
	cout << diff << endl;
}