57 lines
2.8 KiB
C
57 lines
2.8 KiB
C
#include <stdio.h>
|
|
|
|
/* Apuntadores, variables y valores. */
|
|
|
|
void main(void)
|
|
{
|
|
int X = 3, Y = 7, Z[5] = { 2, 4, 6, 8, 10 };
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d \t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
int* IX; /* IX representa un apuntador a un entero. */
|
|
IX = &X; /* IX apunta a X. IX tiene la dirección de X. */
|
|
Y = *IX; /* Y toma el valor de X, ahora vale 3. */
|
|
*IX = 1; /* X se modifica, ahora vale 1. */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d\t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
IX = &Z[2]; /* IX apunta al tercer elemento del arreglo Z. */
|
|
Y = *IX; /* Y toma el valor de Z[2], ahora vale 6. */
|
|
*IX = 15; /* Z[2] se modifica, ahora vale 15. */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d\t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
X = *IX + 5; /* X se modifica, ahora vale Z[2] + 5 = 20. Recuerda que *IX contiene el valor de Z[2]. */
|
|
*IX = *IX - 5; /* Z[2] se modifica, ahora vale 10. */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d \t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
++* IX; /* Z[2] se modifica, se incrementa en 1. Z[2] ahora vale 11. */
|
|
*IX += 1; /* Z[2] se vuelve a modificar, ahora vale 12. */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d\t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
X = *(IX + 1); /* X se modifica. El apuntador IX accede temporalmente a Z[3], por lo tanto X toma este valor (8). Observa que IX no se reasigna */
|
|
Y = *IX; /* Y se modifica, toma el valor de Z[2] (12). */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d\t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
IX = IX + 1; /* IX se modifica. Observa la forma de mover el apuntador.
|
|
Ahora IX apunta al cuarto elemento de Z (Z[3]). */
|
|
Y = *IX; /* Y se modifica, ahora vale Z[3] (8). */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d \t Z[4] =% d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
IX = IX + 4; /* IX se modifica. Observa que el apuntador se mueve
|
|
➥4 posiciones y cae en una dirección afuera del arreglo. Esto ocasionará un
|
|
➥error. */ Y = *IX; /* Y se modifica, toma el valor (basura) de una celda
|
|
➥incorrecta. Es un error que no señala el compilador del lenguaje C. */
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d \t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
|
|
IX = &X; /* IX apunta a la variable entera X. */
|
|
IX = IX + 1; /* IX se mueve una posición y cae en una celda incorrecta. */
|
|
X = *IX; /* X toma el valor (basura) de la celda a la que apunta IX.*/
|
|
|
|
printf("\nX = %d \t Y = %d \t Z[0] = %d \t Z[1] = %d \t Z[2] = %d \t Z[3] = %d \t Z[4] = %d", X, Y, Z[0], Z[1], Z[2], Z[3], Z[4]);
|
|
}
|