Penso di capire bene i riferimenti e i puntatori. Ecco cosa so (penso):Informazioni sui puntatori C++ (quando puntano a un puntatore)
int i = 5; //i is a primitive type, the value is 5, i do not know the address.
int *ptr; //a pointer to an int. i have no way if knowing the value yet.
ptr = &i; //now i have an address for the value of i (called ptr)
*ptr = 10; //Go to the value in ptr, use it to find a location and store 10 there
Non esitate a commentare o correggere queste dichiarazioni.
Ora sto provando a fare il salto agli array di puntatori. Ecco quello che non conosco:
char **char_ptrs = new char *[50];
Node **node_ptrs = new Node *[50];
La mia comprensione è che ho 2 array di puntatori, una serie di puntatori a caratteri e uno a nodi. Quindi, se ho voluto impostare i valori, vorrei fare qualcosa di simile:
char_ptrs[0] = new char[20];
node_ptrs[0] = new Node;
ora ho un puntatore, nella 0 posizione del mio schieramento, in ogni rispettiva disposizione. Di nuovo, sentiti libero di commentare qui se sono confuso.
Quindi, cosa fa l'operatore **? Allo stesso modo, cosa sta mettendo un singolo * accanto alla creazione dell'istanza (* [50])? (come si chiama esattamente, l'istanza?)
* ptr = 10 non è "andare a ottenere il valore memorizzato in ptr e cambiarlo in 10". Dovrebbe essere "Vai al valore in ptr, usalo per trovare un'altra posizione e memorizza 10 lì". Questo è il punto di dereferenziazione del puntatore. – Uri
@Uri bene incontrato. modificato e aggiornato. – Stephano
Devo notare che questo libro è stato straordinariamente utile nell'apprendimento dei puntatori in C: Comprensione e utilizzo dei puntatori C di Richard Reese. Lo consiglierei a chiunque stia imparando C o C++, poiché i concetti in esso contenuti sono inestimabili. – Stephano