Por qué varios punteros pueden apuntar a una dirección en C

5

C te permite crear caos o claridad con la memoria. Puede tener docenas de punteros, todos apuntando exactamente al mismo lugar en la RAM. Esto no es un error. Es una característica.

Considere un escenario en el que declara un número entero “i”. Luego crea tres punteros enteros: p, q y r.

El código hace exactamente lo que cabría esperar. p toma la dirección de i. q hace lo mismo. r copia lo que sea que contenga p. Dado que “p” contiene la dirección de “i”, “r” también apunta a “i”.

Después de ejecutar estas asignaciones, tendrá una variable con cuatro nombres. yo es el original. *p accede a él. *q accede a él. *r accede a él.

Cómo funciona la asignación de puntero

La clave aquí es comprender lo que sucede durante la asignación. Cuando escribes q = &i, no estás copiando el valor de i. Estás copiando la ubicación de i.

Cuando escribes r = p, copias la dirección de p a r. No se asigna ninguna memoria nueva. Ningún dato está duplicado. El valor de la dirección se mueve de una variable de puntero a otra.

Esto significa que no hay un límite estricto sobre cuántos punteros pueden contener la misma dirección. Puede crear mil punteros, todos apuntando a “i”. Todos se refieren a la misma ubicación de memoria.

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

Este comportamiento es fundamental para cómo C gestiona la memoria. Permite estructuras de datos flexibles como listas enlazadas y árboles. También permite argumentos de funciones eficientes. Pase un puntero en lugar de una copia. Modifique los datos originales directamente.

Pero también introduce riesgos. Cambie i por p. Mire desde “i” hasta “q”. El cambio es visible en todas partes. Sólo hay una fuente de verdad.

La variable i ahora tiene cuatro nombres. yo. *p. *q. *r.

Así es como funciona C. Tienes acceso directo a las direcciones de memoria. Puede crear alias de datos libremente. Sólo debes tener cuidado con lo que cambias.