Files
Curso_de_Programacion_C/5. Arreglos unidimensionales/Programas/Programa 5.3/Programa 5.3.c
2022-11-16 18:28:01 -04:00

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]);
}