Menu
Coddy logo textTech

Pasar estructuras por valor

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 46 de 63.

Ahora que sabes cómo trabajar con estructuras y punteros a estructuras, es hora de aprender a pasar estructuras completas a las funciones. Cuando pasas una estructura a una función como parámetro, C utiliza la paso por valor, lo que significa que la función recibe una copia completa de la estructura.

Aquí está la sintaxis para una función que acepta un parámetro de estructura:

void functionName(struct StructureName parameterName) {
    // Cuerpo de la función
}

Usando nuestra conocida estructura Point como ejemplo:

void printPoint(struct Point p) {
    printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}

El concepto clave que debes comprender es que cualquier cambio que hagas en la estructura dentro de la función no afectará a la estructura original de la función que realiza la llamada. Esto se debe a que la función trabaja con su propia copia de los datos.

Este enfoque es útil cuando quieres leer o mostrar datos de una estructura sin arriesgarte a modificar accidentalmente el original. Sin embargo, ten en cuenta que copiar estructuras grandes puede ser ineficiente en términos de memoria y rendimiento.

challenge icon

Desafío

Fácil

Crea un programa en C que demuestre cómo pasar estructuras a funciones por valor. Tu programa debe:

  1. Definir una struct llamada Rectangle con los siguientes miembros:
    • Un entero width para almacenar el ancho del rectángulo
    • Un entero height para almacenar la altura del rectángulo
    • Un arreglo de caracteres color de tamaño 15 para almacenar el color del rectángulo
  2. Escribir una función llamada displayRectangle que:
    • Reciba una estructura Rectangle como parámetro (paso por valor)
    • Imprima la información del rectángulo en este formato exacto:
      • Rectangle Details:
      • Width: [width]
      • Height: [height]
      • Color: [color]
      • Area: [area]
    • Calcule e imprima el área (ancho × altura)
  3. Escribir una función llamada modifyRectangle que:
    • Reciba una estructura Rectangle como parámetro (paso por valor)
    • Duplique tanto el ancho como la altura del rectángulo
    • Cambie el color a "Modified"
    • Imprima Inside modifyRectangle function:
    • Llame a displayRectangle para mostrar el rectángulo modificado
  4. En la función principal:
    • Cree una variable Rectangle llamada rect
    • Lea el ancho, la altura y el color de la entrada, y asígnelos a los miembros de la estructura
    • Imprima Original rectangle:
    • Llame a displayRectangle para mostrar el rectángulo original
    • Llame a modifyRectangle con el rectángulo
    • Imprima After modifyRectangle call:
    • Llame nuevamente a displayRectangle para mostrar que el rectángulo original no ha cambiado

Este desafío demuestra el concepto clave del paso por valor con estructuras: cuando pasas una estructura a una función, la función recibe una copia completa de la estructura. Cualquier modificación realizada dentro de la función afecta únicamente a la copia, no a la estructura original de la función que realiza la llamada.

Pruébalo tú mismo

#include <stdio.h>
#include <string.h>

// TODO: Define la estructura Rectangle aquí

// TODO: Escribe la función displayRectangle aquí

// TODO: Escribe la función modifyRectangle aquí

int main() {
    // Leer entrada
    int width, height;
    char color[15];
    
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%s", color);
    
    // TODO: Crear la variable Rectangle y asignar los valores de entrada
    
    // TODO: Imprimir "Original rectangle:" y llamar a displayRectangle
    
    // TODO: Llamar a modifyRectangle
    
    // TODO: Imprimir "After modifyRectangle call:" y llamar a displayRectangle de nuevo
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C online