C le permite crear un atasco de punteros, todos apuntando a la misma ubicación de memoria. Esto no es un error. Es una característica. Puede declarar tantos punteros como desee y hacer que todos hagan referencia a exactamente la misma variable.

Considere este escenario. Tienes un número entero “i”. También tiene tres punteros: p, q y r. Configura “p” para que apunte a “i”. Luego configura “q” para que apunte a “i”. Finalmente, configura r para que apunte hacia donde apunta p.

En este bloque, r apunta a lo mismo que p. Que es “yo”. El operador de asignación copia la dirección del lado derecho al izquierdo. No copia el valor. Copia la ubicación.

Después de la ejecución, “i” tiene cuatro nombres. yo mismo. *p. *q. Y *r.

No hay límite en cuanto a la cantidad de punteros que pueden contener una sola dirección. Puedes encadenarlos. Puedes copiarlos. Puedes señalarlos todos a la vez.

¿Por qué esto importa? Importa porque cambia tu forma de pensar sobre la memoria. Un puntero es sólo una etiqueta para una ubicación. Si varias etiquetas apuntan al mismo lugar, todas verán los mismos datos. Cambie los datos a través de *p. *q también lo ve.

Esta flexibilidad es poderosa. También es peligroso. Un error tipográfico en la asignación de un puntero y sobrescribirá datos que no pretendía tocar. Pero por ahora, comprenda que los consejos son flexibles. No son dueños de la memoria. Simplemente lo señalan. Y varios punteros pueden apuntar al mismo lugar sin discutir.