Creo que entiendo bastante bien las referencias y los punteros. Esto es lo que yo (creo que) sé:Descripción de los punteros de C++ (cuando apuntan a un puntero)
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
No dude en comentar o corregir estas afirmaciones.
Ahora estoy tratando de dar el salto a matrices de punteros. Esto es lo que no sé:
char **char_ptrs = new char *[50];
Node **node_ptrs = new Node *[50];
Mi entendimiento es que tengo 2 arrays de punteros, un conjunto de punteros a caracteres y uno de los nodos. Así que si quería establecer los valores, me gustaría hacer algo como esto:
char_ptrs[0] = new char[20];
node_ptrs[0] = new Node;
Ahora tienen un puntero, en la posición 0 de mi matriz, en cada matriz respectiva. De nuevo, siéntete libre de comentar aquí si estoy confundido.
Entonces, ¿qué hace el operador **? Del mismo modo, ¿qué está poniendo un solo * al lado de la creación de instancias (* [50])? (¿cómo se llama exactamente, instanciación?)
* ptr = 10 no es "vaya a obtener el valor almacenado en ptr y cámbielo a 10". Debería ser "Ir al valor en ptr, usarlo para buscar otra ubicación y almacenar 10 allí". Ese es el punto de desreferenciar el puntero. – Uri
@Uri bien conocido. editado y actualizado. – Stephano
Debo señalar que este libro fue extraordinariamente útil para aprender sobre los indicadores en C: comprensión y uso de los indicadores C de Richard Reese. Yo recomendaría esto a cualquier persona que aprenda C o C++, ya que los conceptos que contiene son invaluables. – Stephano