4. int numeros[40];
float otros_numeros[] = {4.6, 5.6, 2.1, 4.5};
int i;
for(i = 0; i < 40; i++) {
printf(“Escribe un número: ”);
scanf(“%d”, &numeros[i]);
}
for (i = 0; i < 4; i++)
printf(“%fn”, otros_numeros[i]);
26/04/12 Programación avanzada y métodos numéricos 4
5. Apuntador
Son variables que almacenan
direcciones de memoria.
26/04/12 Programación avanzada y métodos numéricos 5
6. Declaración: tipo_variable *nombre;
Asignar dirección: nombre =
&variable_del_mismo_tipo;
Devuelve valor almacenado
(desreferenciamiento): *nombre
26/04/12 Programación avanzada y métodos numéricos 6
7. Ejemplo:
int *px; // apuntador
int x = 1, y = 2; // Variables
px = &x; // apunta a x
y = *px; // el valor de x se asigna a
// y, ahora y vale 1
*px = 0; // ahora x vale 0
26/04/12 Programación avanzada y métodos numéricos 7
8. Reserva de espacio en la memoria
Incluir biblioteca stdlib
Declarar apuntador
Asignar espacio a cada apuntador
declarado usando malloc()
Después de usar, liberar espacio usando
free()
26/04/12 Programación avanzada y métodos numéricos 8
9. int *numeros;
// numeros apunta a un espacio donde
caben 40 variables int
numeros = (int *) malloc(40 *
sizeof(int));
// ... Código ...
free(numeros); // Liberamos espacio
26/04/12 Programación avanzada y métodos numéricos 9
10. Aritmética de direcciones
int *px; int x; px = &x;
px++; // apunta 1 posición más adelante
px = px + 2; // apunta 5 posiciones más
//adelante
px = px – 8; // apunta 8 posiciones más atrás
11 Agosto Programación avanzada y métodos numéricos 10
11. 11 Agosto Programación avanzada y métodos numéricos 11
12. int i;
// captura números
for(i = 0; i < 40; i++)
scanf(“%i”,numeros + i);
// imprime números
for(i = 0; i < 40; i++)
printf(“%in”,*(numeros + i));
26/04/12 Programación avanzada y métodos numéricos 12
13. Equivalencia entre arreglos y
apuntadores
vect[i] y *(pv + i) son expresiones
equivalentes
El nombre de un arreglo es el
sinónimo de la dirección de su
posición inicial
26/04/12 Programación avanzada y métodos numéricos 13
14. int vect[10]; int *pv;
pv = vect; // Expresión válida
vect = pv; // Expresión inválida
*(vect + 4) = 302; // asigna 302 a vect[4]
pv[4] = 302; // asigna 302 a *(pv + 4)
26/04/12 Programación avanzada y métodos numéricos 14
15. Arreglos de varios dimensiones
26/04/12 Programación avanzada y métodos numéricos 15
19. int *numeros[20];
int i, j;
for(i = 0; i < 20; i++)
numeros[i] = (int *) malloc(40 * sizeof(int));
for (i = 0; i < 40; i++)
for(j = 0; j < 20; j++)
scanf(“%d”, numeros[j] + i);
for (i = 0; i < 40; i++)
for(j = 0; j < 20; j++)
printf(“%d”, *(numeros[j] + i));
26/04/12 Programación avanzada y métodos numéricos 19
20. Apuntadores y Arreglos
multidimensionales
int a[2][7];
int *b[2];
b[0] = a[0]; // dirección primera fila
b[1] = a[1] + 1; // dirección segunda fila con
offset de 1 espacio
b[0][1] = 6; // a[0][1] también es igual a 6
b[1][4] = 7; // a[1][5] también es igual a 7
26/04/12 Programación avanzada y métodos numéricos 20
21. 26/04/12 Programación avanzada y métodos numéricos 21
22. int *numeros[20];
int i, j;
for(i = 0; j < 20; j++)
numeros[i] = (int *) malloc(40 * sizeof(int));
for (i = 0; i < 40; i++)
for(j = 0; j < 20; j++)
scanf(“%d”, &numeros[j][i]);
for (i = 0; i < 40; i++)
for(j = 0; j < 20; j++)
printf(“%d”, numeros[j][i]);
26/04/12 Programación avanzada y métodos numéricos 22
23. char *palabras[3] =
{“kilowatt”, “centímetro”, “gramo”};
11 Agosto Programación avanzada y métodos numéricos 23
24. char *palabras[10];
char *aux;
int i,j;
/* Reservamos un espacio y capturamos una
cadena en él */
for(i = 0; i < 10; i++) {
nombres[i] = (char *) malloc(30 *
sizeof(char));
printf("Dame una palabra cualquiera: ");
scanf("%s",palabras[i]);
}
26/04/12 Programación avanzada y métodos numéricos 24
25. /* Algoritmo de burbuja */
for(i = 0; i < 9; i++)
for(j = i + 1; j < 10; j++) {
if( strlen(palabras[j]) < strlen(palabras[i]) ) {
/* Solo intercambiamos direcciones */
aux = palabras[j];
palabras[j] = palabras[i];
palabras[i] = aux;
}
}
26/04/12 Programación avanzada y métodos numéricos 25
26. Bibliografía
Luis Joyanes e Ignacio Zahonero.
Programación en C, C++, Java y UML. Ed.
McGraw Hill Latinoamericana.
Harvey y Paul Deitel, Como programar en
C, Ed. Prentice Hall.
26/04/12 Programación avanzada y métodos numéricos 26