La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

1 FUNCIONES EN C

2 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

3 MAPA DE MEMORIA float f;

4 MAPA DE MEMORIA Y APUNTADORES #include int main() { int i; int *p; /* a pointer to an integer */ p = &i; *p=5; printf("%d %d\n", i, *p); return 0; }

5 APUNTADORES Y VECTORES Operador desreferencia (*): 1.Declarar una como apuntador: tipo *nombreApuntador ; 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 derecho Escribir: *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

6 APUNTADORES #include 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; }

7 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 p1p2 *p1 *p2 p1 = A;p2 = &A[3];

8 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;

9 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; tipoTamaño en bytes char1 short2 int2 o 4 long4 8 float4 double8 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;

10 ALGO SOBRE LA PRESEDENCIA Y LOS APUNTADORES PrioridadAsociatividad ()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;

11 ARREGLOS Y APUNTADORES Usando subindices int i; int b[5]; for(i=0;i<5;i++){ b[i]=i+1; } Usando apuntadores int i; int b[5]; int *p = b; //int *p = &b[0]; for(i=0;i<5;i++){ *p++ = i + 1; } Usando apuntadores int i; int b[5]; int *p = b; //int *p = &b[0]; for(i=0;i<5;i++){ *(p+ i) = i+ 1; }

12 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);

13 PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR VALOR #include 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); }

14 PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR REFERENCIA #include 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); }

15 TODO JUNTO – SOLO CODIGO A LO LOCO Hacer 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»); }

16 TODO JUNTO – SOLO CODIGO A LO LOCO Hacer 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++; }

17


Descargar ppt "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."

Presentaciones similares


Anuncios Google