Está en la página 1de 4

Funciones con parmetros de tipo struct

Hemos visto anteriormente que una funcin puede recibir tipos de datos simples como
int, char y float y lo que sucede es que se hace una copia en el parmetro.
Tambin hemos visto y trabajado con parmetros de tipo vector y matriz y el
funcionamiento es muy distinto a los tipos de datos simples. Si en la funcin
modificamos el parmetro lo que sucede es que se modifica la variable que le pasamos
desde la funcin main.
Ahora veamos como trata el lenguaje C los parmetros de tipo struct. Su funcionamiento
es idntico a los tipos de datos simples, es decir que se hace una copia del registro en el
parmetro. No podemos modificar el registro que le enviamos a la funcin sino solo
accederlo para consultarlo.

Problema 1:

Se tiene la siguiente declaracin de registro:


struct producto {
int codigo;
char descripcion[41];
float precio;
}; //obligatorio el punto y coma
Definir una variable en la funcin main e inicializar por asignacin los tres campos.
Plantear una funcin que reciba el registro y lo imprima.

Programa: programa133.c

#include<stdio.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 asignacin:
pro.codigo=1;
strcpy(pro.descripcion,"naranjas");
pro.precio=12.50;
La impresin de los datos del registro lo queremos hacer en otra funcin por lo que
debemos pasar el registro como parmetro:
imprimir(pro);
La funcin imprimir debe tener en forma obligada un parmetro 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 parmetro p recibe una copia exacta de la variable pro definida en la main.

Inicializar por asignacin 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
Se tiene la siguiente declaracin de registro:
struct pais {
char nombre[40];
int cantidadhab;
};

Definir tres variables de tipo pas e iniciarlas por asignacin con la sintaxis:

struct pais pais1={"Argentina",40000000};

Elaborar una funcin que reciba un parmetro de tipo pais y muestre por pantalla
sus dos campos. Llamar a dicha funcin desde la main pasando en forma
sucesiva las tres variables definidas.

programa134.c

#include<stdio.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;
}