funciones en c. sobre funciones... caja negra in_1 in_n out_1 in_2 función: nombre. (con el cual es...
TRANSCRIPT
![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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/1.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/2.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/3.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/4.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/5.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/6.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/7.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/8.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/9.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/10.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/11.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/12.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/13.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/14.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/15.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/16.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062410/5665b49d1a28abb57c92a968/html5/thumbnails/17.jpg)