Paso por valor
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 25 de 63.
Cuando pasas una variable a una función en C, la función recibe una copia del valor de esa variable, no la variable en sí misma. Este concepto fundamental se llama paso por valor.
Esto es lo que sucede: si tienes una variable x con el valor 10 y la pasas a una función, la función obtiene su propia copia separada de ese valor. Cualquier cambio que la función realice en esta copia no afecta a la variable original en la función que la llamó.
void tryToChange(int num) {
num = 99; // Esto solo cambia la copia
}
int main() {
int x = 10;
tryToChange(x);
// x sigue siendo 10, no 99
return 0;
}Este comportamiento protege sus datos originales de ser modificados accidentalmente por las funciones. Sin embargo, también significa que si desea que una función cambie realmente el valor de una variable, el paso por valor (pass-by-value) no funcionará. Comprender esta limitación es crucial a medida que avanza para aprender sobre los punteros y cómo pueden resolver este problema.
Desafío
FácilEscribe un programa en C que demuestre el concepto de paso por valor intentando modificar una variable dentro de una función y observando que la variable original permanece sin cambios.
Tu programa debe:
- Crear una función llamada
tryToModifyque reciba un parámetro entero llamadonumber - Dentro de la función
tryToModify, sumar 50 al parámetronumber - Dentro de la función
tryToModify, imprimir el valor modificado en el formato:Inside function: [value] - En la función
main, declarar una variable entera llamadaoriginale inicializarla con el valor 25 - Imprimir el valor original antes de llamar a la función en el formato:
Before function call: [value] - Llamar a la función
tryToModifyy pasar la variableoriginalcomo argumento - Después de la llamada a la función, imprimir el valor de
originalnuevamente en el formato:After function call: [value]
Tu salida debe demostrar que el valor de la variable original permanece sin cambios a pesar de la modificación dentro de la función:
Before function call: 25
Inside function: 75
After function call: 25Este desafío demuestra el concepto fundamental de paso por valor en C, donde las funciones reciben copias de las variables en lugar de las variables mismas. Cualquier modificación realizada al parámetro dentro de la función no afecta a la variable original en la función que la llama.
Hoja de referencia
En C, las funciones reciben una copia de los valores de las variables, no las variables en sí mismas. Esto se llama paso por valor.
Cuando pasas una variable a una función, cualquier cambio realizado dentro de la función solo afecta a la copia, dejando la variable original sin cambios:
void tryToChange(int num) {
num = 99; // Esto solo cambia la copia
}
int main() {
int x = 10;
tryToChange(x);
// x sigue siendo 10, no 99
return 0;
}Este comportamiento protege tus datos originales de ser modificados accidentalmente por las funciones, pero significa que el paso por valor no funcionará si quieres que una función cambie realmente el valor de una variable.
Pruébalo tú mismo
#include <stdio.h>
// TODO: Escribe tu función tryToModify aquí
int main() {
// TODO: Escribe tu código aquí
// 1. Declarar e inicializar la variable original
// 2. Imprimir el valor antes de la llamada a la función
// 3. Llamar a la función tryToModify
// 4. Imprimir el valor después de la llamada a la función
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Logic & Flow
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas