Cuando declaramos y asignamos una variable se le asigna una porción de memoria a esta junto con el valor que especificamos.
En cambio cuando inicializamos una variable sin asignarle un valor el compilador le brinda una porción de memoria con contenido "basura" (qué es epsecificamente esta basura lo decide el compilador) → Como no podemos asumir nada sobre el contenido de esa basura es una buena práctica asignarle un valor a las variables que inicializamos.
/* Ejemplo 1 */
/* Este programa imprime en consola "Y: 10" */
#include <iostream>
void cambiarValor(int x) {
x = 15;
}
int main(){
int y = 10;
cambiarValor(y);
std::cout <<"Y: " << y << endl;
return 0;
}
/* Ejemplo 2 */
/* Este programa imprime en consola "Y: 15" */
#include <iostream>
**int** cambiarValor(int x) {
x = 15;
**return x;**
}
int main(){
int y = 10;
**y =** cambiarValor(y);
std::cout <<"Y: " << y << endl;
return 0;
}
Se coloca en la posición de memoria del argumento de entrada el valor de la expresión usada en la invocación.
En el ejemplo esto sería que la posición de memoria de la variable x
(argumento de entrada) toma el valor de y
(expresión usada en la invocación).
Si la función modifica el valor no se cambian las variables en el llamador.
Es decir, si no le asignáramos el return value de cambiarValor
a y
, el valor de y
no cambiaría ya que la porción de memoria de y
no fue modificada.
Declaración: int f(int b);
.
Invocación: f(x)
pero también es válido f(x + 5)
y f(5)
.
Es el modo por defecto de pasaje de argumentos en C++
/* Ejemplo 3 */
/* Este programa imprime en consola "Y: 15" */
#include <iostream>
void cambiarValor(int **&x**) {
x = 15;
}
int main(){
int y = 10;
cambiarValor(y);
std::cout <<"Y: " << y << endl;
return 0;
}
Decimos que una variable es una alias de otra variable si ambas apuntan a la misma porción de memoria
En el ejemplo 3, x
es un alias de y
.
El operador &
permite indicar que usaremos la referencia en lugar de la copia de una variable.
La función recibe una dirección de memoria donde encontrar el argumento.
La función puede leer y escribir esa posición de memoria.