lenguaje c, tercer bloque:...

66
Lenguaje C, tercer bloque: Funciones Lenguaje C, tercer bloque: Funciones José Otero 1 Departamento de informática Universidad de Oviedo 28 de noviembre de 2007

Upload: vunga

Post on 16-Oct-2018

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Lenguaje C, tercer bloque: Funciones

José Otero

1Departamento de informáticaUniversidad de Oviedo

28 de noviembre de 2007

Page 2: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 3: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 4: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Concepto de puntero

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 5: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Concepto de puntero

Las variables se almacenan en la memoria.

La posición dentro de la memoria se identifica con unnúmero.Los distintos tipos de datos:

Se codifican de forma distinta.Ocupan distinta cantidad de memoria.

Si se quiere acceder a los datos almacenados en lamemoria directamente, mediante su dirección, esnecesario saber cual es el tipo del objeto.

Por eso existe el tipo de dato puntero a int, char,float,...

Declaración://nombre es un puntero a tipotipo *nombre;

Page 6: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Concepto de puntero

En este curso casi siempre vamos a utilizar punteros en laforma de variables.

En general, un puntero a int/float/char/ ... puededecirse que es una expresión cuyo valor es la dirección dememoria en donde se guarda una variable del tipocorrespondiente.

Page 7: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Operador dirección

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 8: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Operador dirección

No es posible decidir dónde se va a almacenar un dato enla memoria de un ordenador, lo gestiona el sistemaoperativo.

Si se puede averiguar en donde está almacenado un dato.El operador dirección es &. Aplicado a una variable,devuelve la dirección de memoria dónde se haalmacenado dicha variable.

Su valor es de tipo puntero al tipo de la variable.

//a es int, pa es puntero a intint a=707,*pa;//&a es puntero a int, se puede guardar en papa=&a;

Page 9: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Operador dirección

666

667

668

a707

???

???

???

??? 666

667

668

a707

??? 669 pa

670???

int a=707,*pa;

667 669 pa

??? 670

pa=&a;

Page 10: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Operador indirección

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 11: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Operador indirección

Es posible utilizar y/o modificar el valor almacenado enuna posición de memoria mediante un puntero.

El operador indirección es *. Aplicado a una expresión detipo puntero es un sinónimo de la variable contenida enesa posición.

int a=37,*pa;//pa es la direccion de memoria//en donde se almacena apa=&a;

*pa=44;//*pa es lo mismo que aprintf("\n%d",a);//muestra 44a=3;printf("\n%d",*pa);//muestra 3

Page 12: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Tipo puntero

Operador indirección

666

667

668

a37

???

???

???

??? 666

667

668

a44

???

??? 666

667

668

a3

???

??? 666

667

668

a37

???

???

669

670

667

???

669

670

667

???

669 pa

670

667

???

669 pa

670

papa

pa=&a; a=3;int a=37,*pa; *pa=44;

Page 13: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Concepto de función

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 14: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Concepto de función

Una función es una colección independiente dedeclaraciones y sentencias, generalmente enfocadas arealizar una tarea específica.

Un programa en C consta al menos de una función,main().

El problema general se puede descomponer en funciones,más fáciles de codificar y de mantener.

La ejecución de un programa comienza por la funciónmain.

Page 15: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 16: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Como cualquier objeto en C, una función debe declararsey definirse antes de ser utilizada.

La declaración y/o definición no tiene por que hacerse enel mismo fichero fuente de main.En este curso ya se han utilizado funciones: printf,scanf, sqrt, system...

Esas funciones estaban declaradas en los ficheros decabeceras que se incluían al principio de los programas.

Page 17: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Definición de funciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 18: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Definición de funciones

La definición de una función consta de:

Tipo de retorno. Alguno de los vistos: void, int, float,char, ...

Nombre. Es un identificador, al igual que el nombre de unavariable.

Lista de parámetros formales, entre (). Variables en lasque se almacenan los datos con los que operará lafunción. Se especifica su tipo y nombre. Una lista vacía serepresenta por void.Cuerpo. Encerrado entre {}, código fuente que reúne lasinstrucciones que realizan el cálculo correspondiente.

Además, si la función no es void, incluye la sentenciareturn que representa la acción de devolver el resultadocalculado.

Page 19: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Definición de funciones

Esquema:

tipof nombref(tipo1 nombre1, tipo2 nombre2, ...){//declaraciones locales...//sentencias...return expresion_tipof;}

Page 20: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Definición de funciones

Importante:

Las variables que se declaran en el cuerpo de la funciónson locales.

Los parámetros formales también son locales a la función.

Se crean cada vez que se ejecuta la función y sedestruyen cuando finaliza la función.Pueden escribirse varias sentencias return.

Sólo se puede devolver un valor, el de la expresión que seescribe después de return.La función termina cuando se ejecuta la primera de ellas.

Si no hay return la función termina cuando se alcanza la} final.

Page 21: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Declaración de funciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 22: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Declaración de funciones

La declaración de una función (prototipo) sirve para que elcompilador compruebe si se usa correctamente.Consta de:

Tipo de retorno. Alguno de los vistos: void, int, float,char, ...

Nombre. Es un identificador, al igual que el nombre de unavariable.

Tipo de los parámetros formales, encerrados entre (),separados por comas. Aunque se especifique el nombre elcompilador lo ignora.

Se termina con un ;.

NOTA:

Si la definición de una función se escribe antes (en elmismo fuente) de ser usada, no hace falta declararla.

Page 23: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 24: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

Cuando una función se usa, se está realizando unallamada a esa función. La llamada puede hacerse:

Desde la función principal main.Desde otras funciones.Incluso desde la misma función.

Una función puede ser llamada varias veces.La llamada consiste en:

Nombre de la función.Lista de parámetros reales, separados por comas, entre().

Expresiones iguales en tipo, número y orden a losparámetros formales. Si está vacía no se escribe nada entrelos ().

...nombref(param1, param2, ...)...

Page 25: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

Importante:

Si la función no es void, la llamada se puede escribir encualquier parte del programa en donde se pueda escribiruna expresión del tipo que devuelve.

Si la función es (devuelve) void la llamada forma unaúnica sentencia acabada en ;.

Si la función no recibe ningún parámetro, se escriben los() sin contenido dentro de los mismos.

Page 26: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

El tipo de retorno no es void y la lista de parámetros no estávacía.

tipof nombref(tipo1 arg1, tipo2 arg2, ...){...//al menos un returnreturn exp_tipo;}int main(){......nombref(exp_tipo1, exp_tipo2, ...)......}

Page 27: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

El tipo de retorno es void y la lista de parámetros no estávacía.

void nombref(tipo1 arg1, tipo2 arg2, ...){...//sin return}int main(){...nombref(exp_tipo1, exp_tipo2, ...);...}

Page 28: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

El tipo de retorno no es void y la lista de parámetros estávacía.

tipof nombref(void){...//al menos un returnreturn exp_tipo;}int main(){......nombref()......}

Page 29: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Uso de funciones

El tipo de retorno es void y la lista de parámetros está vacía.

void nombref(void){...}int main(){...nombref();...}

Page 30: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Impacto del orden de las definiciones/declaraciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 31: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Impacto del orden de las definiciones/declaraciones

No siempre es adecuado definir y declarar las funcionessimultáneamente, las funciones tienen que definirse en orden.

#include<stdio.h>//esta se define primerovoid muestra_mensaje(void){

printf("\nEntero positivo?");}//porque se usa aquiint lee_positivo(void){

int n;do{

muestra_mensaje();scanf("%d",&n);

}while(n<0);return n;

}

int main(){

int a;a=lee_positivo();printf("\n%d",a);

}

#include<stdio.h>//declaramos las funciones en//en cualquier ordenvoid muestra_mensaje(void);int lee_positivo(void);int main(){

int a;a=lee_positivo();printf("\n%d",a);

}//las definimos en cualquier ordenint lee_positivo(void){

int n;do{

muestra_mensaje();scanf("%d",&n);

}while(n<0);return n;

}

void muestra_mensaje(void){

printf("\nEntero positivo?");}

Page 32: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 33: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

Cuando los parámetros formales son de alguno de los tipos:int, float, char,... se están pasando los parámetros porvalor.

Los parámetros reales pueden ser expresiones (del mismotipo que el correspondiente parámetro formal).

Su valor se copia en el correspondiente parámetro formal.

Aunque se modifiquen los parámetros formales, dentro dela función, no se modifican los parámetros reales.

Page 34: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

666

667

668

669

670

671

x

s

1436

????

????

????

????

????

Page 35: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

666

667

668

669

670

671

x

s

1436

????

????

????

????

a1436

Page 36: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

666

667

668

669

670

671

x

s

1436

????

????

????

a1436

0 suma

Page 37: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

666

667

668

669

670

671

x

s

1436

????

????

????

a

suma

1436,143,14,1,0

6,9,13,14

Page 38: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por valor

666

667

668

669

670

671

x

s

1436

14

????

????

????

????

Page 39: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 40: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

Cuando alguno de los parámetros formales de una funciónes de tipo puntero, se está utilizando el paso porreferencia.

La función puede modificar el valor almacenado en lasposiciones de memoria que se pasan como punteros.Se usa el paso por referencia cuando:

Se desea que algún parámetro sea de entrada y salida.No se desea hacer copias de algún parámetro, porcuestiones de eficiencia (tiempo y/o espacio).De forma implícita, cuando los datos que maneja la funciónson punteros.

Page 41: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

831

832

667

666 x

y

33

7

???

???

???

??? 833

Page 42: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

832

667

666 x

y

33

7

???

666

667

a

b

???

831

833

Page 43: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

831

832

667

666 x

y

33

7

???

666

667

a

b

??? 833 tmp

Page 44: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

831

832

667

666 x

y

33

7

???

666

667

a

b

33 833 tmp

Page 45: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

831

832

667

666 x

y

7

7

???

666

667

a

b

33 833 tmp

Page 46: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

831

832

667

666 x

y

7

33

???

666

667

a

b

33 833 tmp

Page 47: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Paso por referencia

668

831

832

667

666 x

y

7

33

???

833

???

???

???

Page 48: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

Índice1 Tipo puntero

Concepto de punteroOperador direcciónOperador indirección

2 Concepto de función

3 Definición, declaración y uso de funcionesDefinición de funcionesDeclaración de funcionesUso de funcionesImpacto del orden de las definiciones/declaracionesPaso por valorPaso por referenciaLlamadas a funciones desde funciones

Page 49: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

Se pueden hacer llamadas a funciones desde otrasfunciones (además de desde main).Se pueden hacer varias llamadas a la misma función.

Desde el mismo bloque.Desde otros bloques.

Los parámetros formales van tomando el valor de losparámetros reales de cada llamada.

Los parámetros formales y las variables locales se creanal principio de la llamada y se destruyen al finalizar esta.

Page 50: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

?????????????????????????????????

abc

??? 677

Page 51: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53???????????????????????????

abc

teclea 5 y 3El usuario

??? 677

Page 52: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3???????????????

abc

nm

5

??? 677

Page 53: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3???????????????

abc

nm

5

fnfmfnm

??? 677

Page 54: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3?????????5???

abc

nm

5

fnfmfnmnum

??? 677

Page 55: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3?????????51

abc

nm

5

fnfmfnmnum

??? 677fi

Page 56: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3?????????5

abc

nm

5

fnfmfnmnum

677fi2,3,4,5

2,6,24,120

Page 57: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3120??????

abc

nm

5

fnfmfnm

677

?????????

Page 58: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3120??????3???

abc

nm

5

fnfmfnmnum

??? 677

Page 59: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3

??????31

abc

nm

5

fnfmfnmnum

??? 677fi

120

Page 60: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3120??????3

abc

nm

5

fnfmfnmnum

677fi

2,62,3

Page 61: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

31206???

abc

nm

5

fnfmfnm

677

?????????

Page 62: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

31206???2???

abc

nm

5

fnfmfnmnum

??? 677

Page 63: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

31206???21

abc

nm

5

fnfmfnmnum

??? 677fi

Page 64: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

3120

???2

abc

nm

5

fnfmfnmnum

677fi

22

6

Page 65: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53??????

312062

abc

nm

5

fnfmfnm

677

?????????

Page 66: Lenguaje C, tercer bloque: Funcionesdi002.edv.uniovi.es/~jotero/indtec20072008/tras/C_bloque3_clases.pdf · Lenguaje C, tercer bloque ... Un programa en C consta al menos de una función,

Lenguaje C, tercer bloque: Funciones

Definición, declaración y uso de funciones

Llamadas a funciones desde funciones

666667668669670671672673

675674

676

53

???

abc

677

?????????

???????????????

10