Tema 9

Anuncio
Tema 9
Ampliación de
Funciones
Contenidos
1. Localidad (ámbito) de variables.
1.1. Variables globales.
1.2. Variables locales.
1.3. Parámetros (argumentos).
2. Paso de argumentos.
2.1. Paso por valor.
2.2. Paso por referencia.
2
Ámbito de una variable
Ámbito de una variable: Es la porción de código en que se ve
esa variable. Una variable sólo puede utilizarse dentro de su
ámbito.
En función de su ámbito, las variables se clasifican en variables globales y
variables locales.
Variables globales
Son aquellas variables que se definen fuera de cualquier función del programa. Su
ámbito es todo el código posterior a su declaración. Se pueden ver y usar en
cualquier función definida después.
Variables locales
Son aquellas variables definidas dentro de una función. Sólo pueden verse y usarse
dentro de la función en que se declaran.
Parámetros (o argumentos)
Aparecen siempre en la cabecera de una función. Su ámbito es la función en la que
aparecen. Al igual que las variables locales, sólo pueden verse y usarse dentro de la
función en la que están.
3
Ejemplo de ámbito de variables
#include <stdio.h>
int b = 5, d = 4; /* Variables globales */
int f1(int a, int b) /* Argumentos */
{ int c; /* Variables locales de f1 */
c = a + b;
d += c;
return c;
}
int f2(int a, int d) /* Argumentos */
{ int c; /* Variables locales de f2 */
c = a + b;
return c;
}
int main()
{ int a, b = 1, c = 2; /* Var. locales de main */
a = f1(b,c); printf("f1 da %d\n", a);
printf("d = %d\n", d);
a = f2(b,c); printf("f2 da %d\n", a);
return 0;
4
}
Ejemplo de ámbito de variables (II)
f1
Variables
globales
d
f2
b
main
d
Función
a, b
Variables
locales
c
a, d
c
Argumentos
a, b, c
Salida por pantalla (sólo lo de color):
(globales: d=4, main: a=¿? b=1 c=2)
f1 da 3 (globales: d=7, f1: a=1 b=2 c=3)
(globales: d=7, main: a=3 b=1 c=2)
d = 7
f2 da 6 (globales: b=5, f2: a=1 d=2 c=6)
(globales: d=7, main: a=6 b=1 c=2)
5
Paso de argumentos
Por valor
A la función se le pasa el valor de la variable/constante/expresión. Si dentro
de la función se modifica el argumento, no afecta al exterior de la función,
pero sí a su valor dentro de la función.
Como argumentos pasados por valor se pueden usar variables, constantes y
expresiones (incluyendo valores devueltos por otras funciones).
Las variables que no sean vectores se pasan siempre por valor, a menos
que se les ponga el & delante en la llamada a la función.
¡Ojo! No se puede pasar una variable por referencia a una función si la función
no la espera por referencia.
Los argumentos son datos de entrada a la función.
Por referencia
A la función se le pasa la dirección de la variable, con lo que si dentro de la
función se modifica el argumento,se verá modificada la variable que se pasó.
Por referencia sólo pueden pasarse variables.
Los vectores se pasan siempre por referencia.
Los argumentos pueden ser datos de entrada y/o de salida a/de la función.
6
Ejemplo de paso de argumentos
#include <stdio.h>
void f1(int a) /* Paso por valor */
{ a++; printf("f1: a = %d\n", a); }
void f2(int v[1]) /* Paso por referencia */
{ v[0]++; printf("f2: v[0] = %d\n", v[0]); }
int main()
{ int v[1], a;
v[0] = 10; printf("main1: v[0] = %d\n", v[0]);
f1(v[0]); printf("main2: v[0] = %d\n", v[0]);
f2(v);
printf("main3: v[0] = %d\n", v[0]);
a = 1;
printf("main4: a = %d\n", a);
f1(a);
printf("main5: a = %d\n", a);
f2(&a);
printf("main6: a = %d\n", a);
return 0;
}
7
Ejemplo de paso de argumentos (II)
Salida por pantalla:
main1: v[0] = 10
f1: a = 11
main2: v[0] = 10
f2: v[0] = 11
main3: v[0] = 11
main4: a = 1
f1: a = 2
main5: a = 1
f2: v[0] = 2
main6: a = 2
Ejercicio: Hacer una función que reciba dos números enteros
y devuelva en ellos el cociente y el resto de su división.
8
Descargar