es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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
Tags:  , ,

Answer

  1. Avatar for 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 y func, las cuales no tienen un tipo de retorno especificado. El código corregido debería lucir así:

    #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\n", x);
    
        func(x);
        printf("%d\n", x);
    
        return 0;
    }
    

    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ón func toma un argumento entero pero no lo modifica y, por lo tanto, no afecta al valor de x. Cuando se llama a function con la dirección de x como argumento, modifica el valor de x a 5, que luego se imprime en la consola utilizando printf. Cuando se llama a func con x como argumento, no ocurre nada con el valor de x, que sigue siendo 5 cuando se imprime en la consola.</stdio.h>

Comments are closed.