No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Parámetros por valor

6/12
Recursos

Aportes 25

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Ese gato al fondo me distrae XD

Aclaración: No es necesario que el nombre del parámetro y el argumento (el valor específico que se pasa a la función) sean iguales. La función puede declarar el parámetro con cualquier nombre, siempre y cuando coincida el tipo de dato que recibe

  • pasar un argumento por referencia, se modifica porque recibe la posición de memoria donde está el valor.
  • pasar un argumento por valor, no se modifica porque es una copia, es decir es una posición de memoria diferente.

Un **Puntero **es un argumento por referencia.

La paradoja de los gemelos me parece una buena forma de ver esto. Un par de gemelos van a hacer un experimento, el gemelo A se queda en la tierra y el gemelo B se va al espacio exterior en una nave viajando a la velocidad de la luz. El gemelo A envejece en la tierra y el gemelo B cuando regresa al planeta se ve igual de joven que cuando se fue (Por cuestiones de leyes físicas como la relatividad de Einstein). Igual que pasar parámetros por valor, mandas a tu copia y tu te queda bien tranquilo y no te afecta lo que le suceda a tu copia. En el caso de parámetros por referencia, es como si NO tuvieras hermano gemelo y tuvieras que ir tu mismo al espacio, todo lo que sucede te afecta.

PARAMETRO POR REFERENCIA:

int n;

funcionX(n);

PARAMETRO POR VALOR:

int n;

funcionX(copia_de_la_variable_n);

La funcion power tiene dos argumentos base y n, en el método main, no se sabe que es n, pero si se conoce i, quizás quedaría más claro en la salida que se imprime por printf indicar el nombre de la variable i, que es la que itera en el bucle.

En la segunda parte ya se cambia y en main se declara n quitando i, ahí se entiende mejor, la salida por pantalla.

Las funciones deberían ser un poco como cajas negras, es decir que no necesitamos conocer como están implementadas para poder llamarlas, por lo que si pasamos como argumento una variable no tiene porque necesariamente llamarse igual.

En la llamada a power que haces en main utilizas un literal 2, y una variable n con valor literal 3.

Recuerdo que eso de Parámetro por Referencia me costo mucho entenderlo en la universidad. Me lo explicaban de forma muy rara y luego me mandaban a hacer Código sin haber terminado de entender.
Al final le agarre el sentido, pero me hubiera gustado tener esta explicación en ese momento.

¡Lindo gato! 🐱

Y la casa del gato es más linda que la del papá del gato 😲

Inviten más al gato.

# include <stdio.h>
int power(int base, int n);

int main()
{
    int n;
    n = 12;

    printf("n = %d resultado de la potencia = %d \n", n, power(2,n));
    
    printf("El valor del exponiente n original siguie siendo: %d \n", n);

    return 0;
}

int power(int base, int n)
{
    int p;

    for (p = 1; n > 0; n--)
    {
        p = p*base;
        printf("El valor temporal de n es: %d \n", n);
    }

    return p;
}

Esta explicación vaya que sí me ha gustado. Y por cierto, el gatito esta hermoso. Me gusta verlo 😃

Buenas peña.
 
Dejo este recurso donde habla sobre Funciones por referencia y por valor en C cortesía de Parzibyte’s
 
Un saludo y gracias.

No se si entendi bien…al colocarle n-- es como si recorriera al reves? o sea…si tengo n=4, va bajando n=3, n=2, n=1 …?

AME ese gato todo pancho del fondo necesito un juguete de arañar como el que tenes para los mios

Por primera vez entiendo el parámetro por valor y por referencia.

Esto solia ser un problema cuando empezaba, que bueno que se toma esta clase en cuenta para evitar errores a quienes recien empiezan 😄

Algo que me dio un poco de Tock es que en el método que calcula la potencia, imprime que el valor temporal es una cuenta atrás del exponente, en lugar del valor de nuestra base durante el ciclo. Es decir, 2^2 debería tener como valor temporal 4, si no el programa es un poco confuso.
Pero vamos, es algo tan simple como cambiar en el printf la variable del exponente, la n, por la variable de la base, la p en este caso.

Sentí muy revuelta esta clase, me revolvió mucho

me estoy enredando demasiado

El gato es muy chistoso…

buena clase

Cuando pasamos una variable por valor la variable original no se esta viendo afectada ni modificada, ya que es una copia la que se esta disminuyendo, aumentando, etc.

Les comparto mi ejemplo

#include <stdio.h>

int potencia(int base, int potencia){
        int resultado = 1;
        for(resultado; potencia > 0; potencia--){
                resultado *= base;
        }

        return resultado;
}

int main(void){
        int base, power;

        printf("Ingresa la base: ");
        scanf("%d", &base);
        printf("Ingresa la potencia: ");
        scanf("%d", &power);
        printf("El resultado es: %d \n", potencia(base, power));

        return 0;
}

Los punteros son una forma de pasar el valor por referencia, lo que significa que el valor original es el que se modifica, ya que se esta pasando la dirección de memoria de la variable

No entendí el for con p y n 😕 Help …