‫Hola y bienvenido.
‫En esta lección vamos a aprender sobre referencias y alternativas a los punteros, y vamos a ver por qué
‫son diferentes, por qué podríamos querer usarlos.
‫Sumerjámonos y veamos.
‫Entonces, además de los punteros, hay un concepto relacionado muy similar llamado referencia.
‫Ahora tanto los punteros como las referencias son esencialmente solo una dirección de memoria.
‫Ambos almacenan una referencia a dónde se puede encontrar otra variable y, de esta manera, son increíblemente
‫similares.
‫La diferencia entre los dos se reduce básicamente a si se pueden reasignar.
‫Básicamente, ¿pueden apuntar a una dirección diferente después de que se crearon por primera vez?
‫En el caso de un puntero, esa respuesta es sí.
‫Puede cambiar un puntero para que apunte a una nueva dirección de memoria, un nuevo actor, un nuevo componente cuando lo
‫desee, siempre que tenga el tipo correcto.
‫Una referencia, por otro lado, solo se puede configurar una vez cuando la crea por primera vez para apuntar a otra
‫variable.
‫Entonces no se puede cambiar de nuevo.
‫Y esta es una característica de seguridad porque volver a apuntar las variables puede generar problemas en los que
‫esas variables pueden desaparecer o en los que establece ese puntero en nulo.
‫Un puntero nulo es esencialmente un puntero que no apunta a nada y tratar de hacer cosas con un punto que no
‫se establece en nada puede bloquear su motor, lo cual no es un resultado ideal con las referencias porque tiene que darles un valor
‫cuando crea por primera vez. a ellos.
‫No pueden ser nulos, por lo que no puede obtener estos bloqueos de puntero nulo.
‫Entonces, comencemos a echar un vistazo a algunas de las sintaxis involucradas.
‫Entonces, cuando accede al contenido con un puntero, debe usar alguna sintaxis especial.
‫Tienes que poner esta estrella delante del puntero para asegurarte de que obtienes el valor en el
‫puntero, no la dirección de memoria con referencias porque en realidad nunca necesitas obtener la dirección de memoria.
‫Simplemente puede usar la variable como si fuera la variable a la que apunta.
‫No tienes que usar ninguna sintaxis especial.
‫Ahora está el acceso a la dirección, por lo que con los punteros obtienes la dirección automáticamente.
‫Cuando usa la variable con una referencia, debe usar una sintaxis especial.
‫Para hacer eso, debe usar la dirección del operador y obtendrá básicamente la misma dirección
‫que la variable original.
‫Y luego está el cambio de dirección con un puntero.
‫Hemos visto que puede asignar la dirección y usar la dirección de operaciones para hacer eso con referencias.
‫Esto no está permitido, por lo que no hay sintaxis para ello.
‫Y finalmente, ¿qué sucede si queremos cambiar el valor al que estamos apuntando, no la dirección, sino el valor
‫real que se almacena en esa dirección?
‫Bueno, con los punteros, tienes que volver a usar alguna sintaxis especial.
‫Tienes que poner esa estrella y luego asignar algo.
‫Entonces, el puntero del actor lo asigna al puntero del actor estrella con referencias nuevamente, porque no puede cambiar
‫la dirección real, no necesita ninguna sintaxis adicional.
‫Podemos eliminar la sintaxis adicional y simplemente hacer que la referencia del actor sea igual.
‫Actor significa que está sobrescribiendo el valor en la ubicación a la que apunta.
‫Así que todo eso es un poco teórico.
‫Tengamos un ejemplo real.
‫Entonces, si tuviéramos un flotador que quizás estuviera almacenando el daño que se nos hizo en el juego y en el que estamos almacenando, el
‫daño actual se establece en cero.
‫Nadie nos ha hecho daño.
‫Ahora podríamos querer crear una referencia a esto en lugar de copiarlo, podríamos querer pasarlo
‫a una función, pero sin cambiarlo realmente.
‫La forma en que podemos hacer esto es tener un flotador y luego colocar el ampersand después del flotador.
‫Y el ampersand dice que esta es una referencia a un flotador.
‫No es un nuevo flotador en sí mismo, no asigna ninguna memoria flotante.
‫Simplemente asigna memoria de puntero.
‫Y entonces podemos llamar a esto la referencia dañada y podemos igualarlo a daño.
‫No tenemos que tomar la dirección de ni hacer nada por el estilo.
‫Automáticamente sabe, bueno, esto es una referencia y esto es una variable.
‫Entonces, lo que está tratando de hacer aquí es configurar una referencia a esa variable.
‫Y efectivamente, si vamos y registras, entonces podemos imprimir esto como si fuera solo un flotador regular
‫para que podamos decir dos puntos de daño y luego porcentaje F y luego aquí podemos hacer solo un daño de impresión.
‫Ref No necesitamos una sintaxis especial.
‫Podemos usarlo como una variable regular.
‫Avancemos y presionemos reproducir después de compilar, observemos nuestro registro de salida y, por supuesto, el
‫daño es cero, que fue el valor que establecimos.
‫Pero eso no prueba necesariamente que no haya hecho una copia de esa variable original, así que me
‫gustaría desafiarlo a intentar cambiar el valor y ver qué sucede.
‫Entonces use la referencia, la referencia al daño, para establecer un nuevo valor y luego imprima el
‫valor original para que el valor original junto al valor de referencia y vea si son iguales o son
‫diferentes.
‫Solo cambias la referencia, pero ¿cambia también el original?
‫Porque eso implicaría que ambos son la misma variable pausar video y probar.
‫Bueno.
‫Bienvenido de nuevo.
‫Así que vamos a darle a esto una puñalada.
‫Entonces, para cambiar la referencia ahora, vamos a hacer daño ref igual.
‫Y esta vez voy a decir lo que hicimos cinco daños y eso es que no he tenido que usar ninguna sintaxis especial
‫aquí.
‫No está redireccionando la referencia porque ya la declaramos y configuramos su referencia en esa primera
‫línea cuando se crea.
‫No podemos hacerlo de nuevo.
‫Así que ahora podemos simplemente establecer el valor.
‫Entonces, lo que puedo hacer ahora es que tenemos la referencia de daños aquí en el registro.
‫Pongamos también un daño y un porcentaje f en esa misma cadena y luego pasemos el daño aquí también.
‫Y luego vamos a compilar y echar un vistazo.
‫Hagamos clic en reproducir, vayamos a nuestro registro de salida y, por supuesto, está imprimiendo la referencia de daño y el daño como
‫si ambos tuvieran el nuevo valor que hemos establecido en cinco.
‫Entonces, en esencia, lo que tenemos aquí son dos variables que apuntan a la misma pieza de memoria.
‫Casi se podría decir que todas son la misma variable, pero con nombres diferentes.
‫Esto tiene la ventaja de no necesitar una copia, como un puntero, pero también tiene muchos más beneficios porque
‫es mucho más fácil de usar.
‫No necesitamos toda esa sintaxis adicional y también es más seguro de usar.
‫Entonces, siempre que no necesitemos volver a pintar nada, generalmente es preferible usar referencias.
‫Ahora hagamos una revisión rápida de algunos de los símbolos que usamos aquí porque pueden resultar un poco confusos.
‫Se usan mucho en C++.
‫Entonces, los símbolos de ampersand y estrella, echemos un vistazo en contexto y lo que significan.
‫Entonces, cuando los usamos, cuando los usamos en una expresión, aquí hay algunos ejemplos de código.
‫Es posible que vea la estrella antes de una variable.
‫Es posible que vea el ampersand antes de una variable.
‫¿Qué significa esto?
‫Bueno, con el símbolo de la estrella, la sintaxis de ponerlo antes de la variable significa que estamos obteniendo
‫el contenido en el puntero del actor ahora con el ampersand.
‫Si coloca el ampersand delante de una variable o delante de una referencia a una variable, está
‫diciendo que está obteniendo la dirección de esa variable.
‫Es obtener la dirección del actor o la dirección a la que apunta la referencia.
‫Ahora, cuando estamos declarando que lo estamos usando, termine el tipo de una variable.
‫Las estrellas y el ampersand tienen significados casi opuestos.
‫Entonces, la estrella significa que este es un indicador de un nuevo actor y el ampersand significa que es una referencia a
‫tu actor.
‫Así que recuerde que hay un conjunto de significados completamente diferente, ya sea que los
‫esté usando con una variable en una expresión, o si los está usando en el tipo que declara una variable.
‫Ahora, no entraré en demasiados detalles, pero para colmo de males, estos pueden tener otros
‫significados.
‫En otro contexto, el ampersand puede significar un poco sabio y la estrella, como ya hemos visto, se puede
‫usar con cadenas en el registro U.
‫Así que estos no son necesariamente todos los significados de estos dos símbolos, pero son
‫prácticamente todos los significados importantes que se refieren a punteros y referencias.
‫Buena cosa.
‫Así que hemos aprendido sobre punteros, referencias, cómo se relacionan entre sí, en qué se diferencian y
‫por qué podríamos querer usarlos.
‫Te veré en la próxima conferencia.