Title: Indice del curso
1Funciones II
PASO DE PARÁMETROS
- Se utiliza como argumentos de salida o de
entrada/salida. - Permite implementar una función como un
procedimiento. - Es necesario el uso de punteros.
- Se utilizan como argumentos de entrada
2Funciones II
Paso de parámetros por valor
Los valores de las variables o de las constantes
que se escriben como argumentos en la invocación
de una función, se copian en las direcciones de
memoria reservada a los parámetros formales de la
función invocada.
include ltstdio.hgt float media_aritmética (int,
int, int) void main (void) int x0, y0,
z0 float media0.0
include ltstdio.hgt float media_aritmética (int,
int, int) void main (void) int x0, y0,
z0 float media0.0 printf (\n
Teclee tres números) scanf (ddd, x,
y,z)
include ltstdio.hgt float media_aritmética (int,
int, int) void main (void) int x0, y0,
z0 float media0.0 printf (\n
Teclee tres números) scanf (ddd, x,
y,z) media media_aritmetica (x, y, z)
float media_aritmética (int a, int b, int c)
a a b c
float media_aritmética (int a, int b, int c)
a a b c return (a / 3.0)
16
5.33...
3Funciones II
Paso de parámetros por referencia I
- En C no existen procedimientos, pero se puede
conseguir que una función actúe como un
procedimiento mediante el uso de punteros en los
parámetros formales de la función. - Un puntero es una variable capaz de almacenar
direcciones de memoria y mediante los operadores
adecuados acceder a la información que contiene
la dirección de memoria a la que apunta en cada
momento. - Operador sirve para
- Declarar un puntero, (p.e. int pint, float
pf) - Acceder la información apuntada por el puntero.
- Operador devuelve la dirección donde el
compilador ubica una variable en la memoria.
4Funciones II
Paso de parámetros por referencia II
Se pasan las direcciones de las variables que
queremos sean modificadas por la función, de
manera que dentro de la función definimos los
correspondientes punteros que almacenan las
citadas direcciones.
include ltstdio.hgt void intercambio (int , int
) void main (void) int x5, y8
intercambio (x, y)
void intercambio (int p1, int p2) int
tmp tmp p1
5Funciones II
Ejemplos de uso de operadores de punteros.-
Se declaran dos variable enteras i y j y un
puntero a entero p int i, j, p Suponemos que
i y j se ubican en las direcciones 13B6 e
5FC4, respectivamente.
operación
i15
15
pi (p apunta a i)
15
jp (se accede a lo apuntado por
p)
6Funciones II
Definición de Procedimiento (LEA vs C)
LEA proc nombre (ent e1Te1 ... enTen
sal s1Ts1 ... smTsm es
r1Tr1 ... rpTrp) Pre P(e1, ..., en, r1,
..., rp) Post Q(e1, ..., en, s1, ..., sm, r1,
..., rp) cons definición de constantes var
declaración de variables prin sentencias
exp (ei, si, ri, x) sentencias fin
C typedef Ts1 PTs1 ... typedef Tr1
PTr1 ... void nombre (Te1 e1, ..., Ten en,
PTs1 s1, ..., PTsm sm,
PTr1 r1, ..., PTrp rp)
declaración de variables instrucciones exp
(ei, si, ri, x) instrucciones
7Funciones II
Ejemplo de llamada y Definición de Procedimiento
include ltstdio.hgt typedef int Pint typedef
float Pfloat void MulDiv (int, int, Pint,
Pfloat) void main (void) int x, y, m
float d printf (\n Teclee dos
números) scanf (dd, x, y)
MulDiv (x, y, m, d) printf (d dd,
x, y, m) printf (d / d f, x, y, d)