A2A. Lo intentaré: es difícil de explicar sin entender lo que no entiendes. Principalmente, los punteros son difíciles porque estás acostumbrado a pensar en las cosas.
No son tan difíciles, pero hay algo que debe hacer clic. Dependiendo del idioma que esté utilizando, la notación tampoco ayuda.
Todo en una computadora está realmente almacenado en la memoria.
Cada bit / byte en la memoria tiene una dirección. Para los humanos, tratar con direcciones es complejo, por lo que todos los lenguajes de programación le permiten nombrar cosas: las variables tienen nombres y también las funciones.
Esto le permite hacer cosas como definir una variable:
int edad = 42;
- Utilicé la plancha de pelo de mis primos y me di cuenta de que algunas partes de mi cabello ahora están lisas. ¿Recuperaré mis rizos naturales? Me he alisado el pelo antes, no sé qué pasó esta vez.
- Mi pene está doblado hacia abajo. ¿Esto está bien?
- Mi bungalow está ubicado al final de la calle, justo al lado del mercado principal. ¿Es posible evitar el ruido no deseado instalando puertas de buena calidad?
- ¿Por qué me desaniman las mujeres que comen?
- Mi único interés es ganar dinero. No tengo otras pasiones. ¿Qué debo hacer?
y a partir de ese momento puede referirse a esa variable por su nombre.
Sin embargo, lo que la computadora hará internamente es elegir una dirección, digamos 5432, y almacenar el valor 42 allí:
memoria [5432] = 42;
El nombre “edad” que utiliza es simplemente un alias para “memoria [5432]”.
Si quisieras saber qué es este puntero, puedes hacer:
int * age_ptr = & age;
El primer bit “int *” define age_ptr que es una variable que puede contener un puntero a un entero.
El segundo bit “& age” le dice al compilador que tome el puntero interno y lo asigne a age_ptr, el 5432 en el ejemplo.
Para enteros, esto es algo bastante inútil, pero para estructuras u objetos ahora puede pasar el puntero en lugar de todo. “Solo mira la dirección 5432”. En lugar de traer toda la casa, solo recuerda el número de la casa.
¿Más claro?