Múltiples punteros que apuntan a una dirección de memoria

1

C te permite hacer algo que puede parecer complicado a primera vista. Puede tener varios punteros que hagan referencia a exactamente la misma ubicación de memoria. No es un error. Es una característica.

Considere esta configuración. Declaras un número entero i. Luego declara tres punteros: p, q y r.

Mira lo que pasa aquí. p toma la dirección de i. q hace lo mismo. A r no le importa directamente i. Simplemente copia cualquier dirección que contenga “p”. Dado que “p” apunta a “i”, “r” también termina apuntando a “i”.

Después de ejecutar estas líneas, no tendrá tres variables separadas flotando. Tienes una variable con cuatro alias.

  • yo
    *p
    *q
    *r

Son todos lo mismo.

Esto sucede porque la asignación del puntero es una copia del valor de la dirección. La dirección del lado derecho se mueve a la variable del lado izquierdo. No se produce ninguna copia profunda de los datos. Sólo se transfiere la ubicación de la memoria.

No hay límite para esto. Puedes encadenar tantos punteros como quieras. a = b; c = segundo; d = c; No importa. Todos apuntan al mismo lugar en la RAM.

No hay límite en la cantidad de punteros que pueden contener y por lo tanto apuntan a la misma dirección.

¿Por qué esto importa? Significa que puedes pasar referencias libremente. Puede asignar alias a los datos para que los utilicen diferentes partes de su código. Puede crear estructuras de datos complejas donde los nodos hacen referencia entre sí.

También significa precaución. Cambie *p a 5. ¿Qué pasa con la “yo”? Se convierte en “5”. ¿Cambiar *q? i cambia de nuevo. Todos los alias ven la misma actualización.

Esta es C básica. Pero es poderosa. Y es peligroso si pierdes la noción de qué puntero es cuál.