Informática II Funciones parte 2

{ 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);.
724KB Größe 6 Downloads 146 vistas
Informática II -

UTN - FRT

UTN – Facultad Regional Tucumán

Informática II Funciones parte 2 Funciones en C Prof. Ing. Oscar Gálvez A.T.P. Ing. César Ovejero

Informática II -

Contenidos

UTN - FRT

1.Localidad (ámbito) de variables. 1. Variables globales. 2. Variables locales. 3. Parámetros (argumentos). 2. Paso de argumentos. 1. Paso por valor. 2. Paso por referencia.

2

Informática II -

Ámbito de una variable

UTN - FRT

Á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

Informática II -

Ejemplo de ámbito de variables

UTN - FRT

#include 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

Informática II -

Ejemplo de ámbito de variables (II)

UTN - FRT

Función

Variables globales

Argumentos

Variables locales

f1

d

a, b

c

f2

b

a, d

c

main

d

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

Informática II -

Paso de argumentos

UTN - FRT

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 Ala 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

Informática II -

Ejemplo de paso de argumentos

UTN - FRT

#include 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

Informática II -

Ejemplo de paso de argumentos (II)

UTN - FRT

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

8