Te explicaré de una manera fácil y detallada cómo funcionan los punteros en GO. Tengamos en cuenta el siguiente fragmento de código y te lo explicaré línea a línea que debe suceder:
packagemainimport "fmt"
funcmain() {
x := 25 // Línea 1
y := &x // Línea 2
fmt.Println("Línea 3:", x)
fmt.Println("Línea 4:", &x)
fmt.Println("Línea 5:", y)
fmt.Println("Línea 6:", *y)
fmt.Println("Línea 7:", &y)
}
Línea 1: Aqui lo que sucede es que en memoria RAM se va reservar un lugar en la memoria que tendrá 2 cosas: una dirección de memoria (la que obtenemos con &) y un valor, que es 25
Línea 2: Aqui lo que decimos es que habrá un lugar en la memoria que también tendrá 2 cosas: su propia dirección de memoria y un valor, que será la dirección de memoria de x
Línea 3: Imprimirá 25
Línea 4: Imprimirá la dirección de memoria donde se guarda x
Línea 5: Imprimirá el valor de y, que a su vez es la dirección de memoria de x, lo mismo de la línea de arriba
Línea 6: Cuando tenemos una variable que guarda una dirección de memoria (su valor es una dirección de memoria), con el operador * accedemos a ese valor, aqui imprime 25 el valor de x
Línea 7: También es importante notar que asi sea que y guarde como valor una dirección de memoria, y tiene su propia dirección de memoria donde reside, distinto a la dirección de memoria que tiene como valor
Ahora verás el resultado en una consola de lo que imprimió:
Como puedes ver, las líneas 4 y 5 hacen referencia a la misma dirección en memoria, mientras que la línea 7 tiene una totalmente distinta.
Gracias, Juan. Que valiosos aportes sobre la memoria RAM.
Excelente aporte! me sirvio muchisimo! GRACIAS 😃