28 - Funciones con parámetros de tipo struct


Hemos visto anteriormente que una función puede recibir tipos de datos simples como int, char y float y lo que sucede es que se hace una copia en el parámetro.
También hemos visto y trabajado con parámetros de tipo vector y matriz y el funcionamiento es muy distinto a los tipos de datos simples. Si en la función modificamos el parámetro lo que sucede es que se modifica la variable que le pasamos desde la función main.

Ahora veamos como trata el lenguaje C los parámetros de tipo struct. Su funcionamiento es idéntico a los tipos de datos simples, es decir que se hace una copia del registro en el parámetro. No podemos modificar el registro que le enviamos a la función sino solo accederlo para consultarlo.

Problema 1:

Se tiene la siguiente declaración de registro:

Ver video

struct producto {
    int codigo;
    char descripcion[41];
    float precio;
}; //obligatorio el punto y coma

Definir una variable en la función main e inicializar por asignación los tres campos.
Plantear una función que reciba el registro y lo imprima.

Programa: programa133.c

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

struct producto {
    int codigo;
    char descripcion[41];
    float precio;
};

void imprimir(struct producto p)
{
    printf("Codigo del producto:%i\n",p.codigo);
    printf("Descripcion:%s\n",p.descripcion);
    printf("precio:%0.2f",p.precio);
}

int main()
{
    struct producto pro;
    pro.codigo=1;
    strcpy(pro.descripcion,"naranjas");
    pro.precio=12.50;
    imprimir(pro);
    getch();
    return 0;
}

Definimos una variable de tipo producto:

    struct producto pro;

En este problema no se pide cargar por teclado los datos sino por asignación:

    pro.codigo=1;
    strcpy(pro.descripcion,"naranjas");
    pro.precio=12.50;

La impresión de los datos del registro lo queremos hacer en otra función por lo que debemos pasar el registro como parámetro:

    imprimir(pro);

La función imprimir debe tener en forma obligada un parámetro de tipo struct producto:

void imprimir(struct producto p)
{
    printf("Codigo del producto:%i\n",p.codigo);
    printf("Descripcion:%s\n",p.descripcion);
    printf("precio:%0.2f",p.precio);
}

El parámetro p recibe una copia exacta de la variable pro definida en la main.

parámetros de tipo struct en el lenguaje C

Inicializar por asignación variables.

En el lenguaje C podemos definir e inicializar inmediatamente el contenido de una variable.

Si es de tipo entera:

int cantidad=0;

Si es de tipo float:

float altura=1.92;

Si es de tipo char:

char opcion='A';

Si es de tipo vector de enteros:

int vec[3]={10,20,30);

Si se trata de una matriz de enteros:

int mat[2][3]={{10,20,30},
               {40,50,50}};

Finalmente si se trata de una variable de tipo registro la forma de inicializar cada campo con valores es:

int main()
{
    struct producto pro={1,"naranjas",12.50};
    imprimir(pro);
    getch();
    return 0;
}

Problema propuesto

Solución
programa134.c

#include<stdio.h>
#include<conio.h>

struct pais {
    char nombre[40];
    int cantidadhab;
};

void imprimir(struct pais p)
{
    printf("Pais:%s  Poblacion:%i\n",p.nombre,p.cantidadhab);
}

int main()
{
    struct pais pais1={"argentina",40000000};
    struct pais pais2={"chile",17600000};
    struct pais pais3={"uruguay",3400000};
    imprimir(pais1);
    imprimir(pais2);
    imprimir(pais3);
    getch();
    return 0;
}

Retornar