¿Es posible ejecutar f(&a) en C?
La explicación a continuación me confundió:
Cuando un argumento es un puntero a una variable x, normalmente asumimos que x será modificada:
f(&x);Sin embargo, es posible que f solo necesite examinar el valor de x, sin cambiarlo.
Intenté entender y el código a continuación no puede funcionar.
#include <stdio.h>
void function(int& a)
{
a = 5;
}
void func(int b)
{
b = 5;
}
int main(void)
{
int x = 0;
function(x);
printf("%d", function(x));
func(x);
printf("%d", func(x));
return 0;
}
Código sacado de la segunda respuesta:
int f(int &a){
a = 5;
}
int x = 0;
f(x);
// ahora x es igual a 5
int f2(int b){
b = 5;
}
int y = 0;
f2(y);
// y sigue siendo igual a 0
davy.ai
La explicación proporcionada destaca el hecho de cuando una función toma un puntero a una variable en C, puede tanto modificar el valor de la variable como simplemente examinarlo. El código de ejemplo proporcionado en la pregunta no funcionará, ya que está intentando imprimir el valor de retorno de las funciones
function
yfunc
, las cuales no tienen un tipo de retorno especificado. El código corregido debería lucir así:En este código corregido,
function
toma un puntero a un entero como argumento y establece el valor del entero en esa dirección a 5 utilizando el operador de dirección*
. La funciónfunc
toma un argumento entero pero no lo modifica y, por lo tanto, no afecta al valor dex
. Cuando se llama afunction
con la dirección dex
como argumento, modifica el valor dex
a 5, que luego se imprime en la consola utilizandoprintf
. Cuando se llama afunc
conx
como argumento, no ocurre nada con el valor dex
, que sigue siendo 5 cuando se imprime en la consola.</stdio.h>