FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es...

17
FUNCIONES EN C

Transcript of FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es...

Page 1: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

FUNCIONES EN C

Page 2: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

SOBRE FUNCIONES

. . .Caja

negra

in_1

in_N

out_1

In_2

Función:• Nombre. (Con el cual es invocada).• Entradas . (Parámetros de la función). • Salida. (Valor de retorno si tiene).

capitan_planeta(agua, tierra, aire, fuego, corazon);

Por sus poderes reunidos yo soy,…EL CAPITAN PLANETA

Page 3: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

MAPA DE MEMORIA

float f;

Page 4: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

MAPA DE MEMORIA Y APUNTADORES

#include <stdio.h> int main() { int i; int *p; /* a pointer to an integer */ p = &i; *p=5; printf("%d %d\n", i, *p); return 0; }

Page 5: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

APUNTADORES Y VECTORESOperador desreferencia (*):1.Declarar una como apuntador:

tipo *nombreApuntador <=direccion>;

2.Desreferenciar el apuntador (acceder a la direccion de memoria (Ya sea para leer o escribir) apuntada por el apuntador).

Leer: variable = *nombreApuntador; // Puede ir dentro de una //expresion el lado derechoEscribir: *nombreApuntador = valor; //Puede ser tambien una //constante o expresion //cualquiera lo que haya al lado //derecho.

Operador referencia (&)Usado para obtener una direccion de memoria:

&nombreVariable

Page 6: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

APUNTADORES#include <stdio.h>

void printArray(int *, int);

int main() { int a = 3,b,c; int *p1 = NULL; int *p2 = &a; int *p3 = p2; *p3 = a + 1; p1 = &c; *p1 = 2*(*p1 + *p2) - 3; p3 = &b; b = *p2 - 1; *p1 = p2; *p2 = &c; return 0;}

Page 7: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

VECTORES Y APUNTADORES• Para un vector:

El nombre de un vector es la dirección de la posición 0 del vector:

int A[5] = {3,2,5,0,6,10,8,-1};

Según lo anterior: A &A[0]

3 2 5 0 6 10 8 -1

p1 p2

*p1 *p2

p1 = A; p2 = &A[3];

Page 8: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

ARITMETICA DE APUNTADORES• Como un apuntador solo almacena direcciones de memoria las únicas

operaciones validas son la + y -.• También son validas operaciones los operadores unitarios ++ y --.• Para apuntadores cambia un poco el significado de estas operaciones

respecto al caso de las variables.

Variables

Suponga una variable entera a que inicialmente tiene el valor de 5: ¿Cuál sera el resultado despues de la operaciónes a++ y a-=3?

int a = 5;a++;a-=3;

Apuntadores

Suponga que se tiene un apuntador cuyo valor inicial es la direccion 1780 (asignada a una variable cualquiera x): ¿Cuál sera el resultado despues de la operaciónes p++ y p-=3?

int *p = x;p++;p-=3;

Page 9: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

ARITMETICA DE APUNTADORES• El incremento o decremento en apuntadores dependerá del tipo de dato

que esta siendo apuntado

Suponga que se tiene un apuntador a un entero cuyo valor inicial es la direccion 100 (asignada a una variable cualquiera x): ¿Cuál sera el resultado despues de la operaciónes p++ y p-=3?

int *p = x;p++;p-=3;

tipo Tamaño en bytes

char 1

short 2

int 2 o 4

long 4

long long 8

float 4

double 8

Realice lo mismo que en el caso anterior pero asumiendo que ahora se apunta a un dato tipo long long:long long *p = x;p++;p-=3;

Page 10: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

ALGO SOBRE LA PRESEDENCIA Y LOS APUNTADORES

Prioridad Asociatividad() De adentro hacia afuera

++,-- D I

*,/ I D

+,- I D

Algunas expresiones:•(*p)++, (*p)--, ++(*p),--(*p) •*p++,*p--•*++p;*--p

Ojo con los vectores:•p+=i;•*(p+i)=2;

Page 11: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

ARREGLOS Y APUNTADORES

Usando subindicesint i;int b[5];for(i=0;i<5;i++){ b[i]=i+1;}

Usando apuntadoresint i;int b[5];int *p = b; //int *p = &b[0];for(i=0;i<5;i++){ *p++ = i + 1;}

Usando apuntadoresint i;int b[5];int *p = b; //int *p = &b[0];for(i=0;i<5;i++){ *(p+ i) = i+ 1;}

Page 12: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR REFERENCIA Y POR VALOR

Declaración

void intercambiar1(int,int); void intercambiar2(int *,int *);

Definición

void intercambiar1(int x, int y){ int aux; aux = x; x = y; y = aux;}

void intercambiar2(int *x, int *y){ int aux; aux = *x; *x = *y; *y = aux;}

Invocación

int a = 3,b = 5;intercambiar1(a,b);

int a = 3,b = 5;intercambiar2(&a,&b);

Page 13: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR VALOR

#include <stdio.h>

void swap(int i, int j) { int t; t=i; i=j; j=t; }

void main() { int a,b; a=5; b=10; printf("%d %d\n", a, b); swap(a,b); printf("%d %d\n", a, b);}

Page 14: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR REFERENCIA

#include <stdio.h>

void swap(int *i, int *j) { int t; t = *i; *i = *j; *j = t; }

void main() { int a,b; a=5; b=10; printf("%d %d\n",a,b); swap(&a,&b); printf("%d %d\n",a,b); }

Page 15: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

TODO JUNTO – SOLO CODIGO A LO LOCOHacer una función muestre los elementos de un array

Usando subindices

void copyArraySub(int A[],int l){ int i; for(i = 0;i<l;i++) { printf(«%d »,A[i]); } printf(«\n»);}

Usando Apuntadores

void copyArrayPtr(int *p,int l){ int i; for(i = 0;i<l;i++) { printf(«%d »,*p); p1++; } printf(«\n»);}

Page 16: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.

TODO JUNTO – SOLO CODIGO A LO LOCOHacer una función que copie un arreglo a otro

Usando subindices

void copyArraySub(int A[],int B[],int l){ int i; for(i = 0;i<l;i++) { A[i] = B[i]; }}

Usando Apuntadores

void copyArrayPtr(int *p1,int *p2,int l){ int i; for(i = 0;i<l;i++) { *p1 = *p2; p1++; p2++; }}

Page 17: FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.