Curso de Programación en C/Prog72

De WikiCabal
Ir a la navegación Ir a la búsqueda

Prog72

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5   int urn[5] = {100,200,300,400,500};
 6   int * ptr1,
 7       * ptr2, 
 8       * ptr3;
 9 
10   ptr1 = urn;
11   ptr2 = &urn[2];
12 
13   printf( "Valor de pointer, Pointer dereferenciado, Dirección de pointer\n");
14   printf( "ptr1 = %p,          *ptr1 =%d,             &ptr1 = %p\n",
15            ptr1,               *ptr1,                 &ptr1 );
16 
17   // Adición con pointers
18   ptr3 = ptr1 + 4;
19   printf( "\nAdición de int a un pointer:\n" );
20   printf( "ptr1 + 4 = %p, *(ptr1 + 3) = %d\n",
21            ptr1 + 4,      *(ptr1 + 3) );
22 
23   ptr1++;            // incrementar un pointer
24   printf( "\nValores después de ptr1++:\n" );
25   printf( "ptr1 = %p, *ptr1 =%d, &ptr1 = %p\n",
26            ptr1,      *ptr1,     &ptr1);
27 
28   ptr2--;            // decrementar un pointer
29   printf( "\nValores después de --ptr2:\n" );
30   printf( "ptr2 = %p, *ptr2 = %d, &ptr2 = %p\n",
31            ptr2,      *ptr2,      &ptr2);
32 
33   --ptr1;            // restorar valor original
34   ++ptr2;            // restorar valor original
35 
36   printf( "\nPointers regresados a sus valores originales:\n" );
37   printf( "ptr1 = %p, ptr2 = %p\n", ptr1, ptr2 );
38 
39                       // un pointer menos otra pointer
40   printf( "\nUn pointer menos otro pointer:\n" );
41   printf( "ptr2 = %p, ptr1 = %p, ptr2 - ptr1 = %d\n",
42            ptr2,      ptr1,      ptr2 - ptr1);
43 
44                       // un pointer menos un intero
45   printf( "\nUn pointer menos un intero:\n");
46   printf( "ptr3 = %p, ptr3 - 2 = %p\n",
47            ptr3,  ptr3 - 2);
48 
49   return 0;
50 }

Resultado

[rrc@Pridd CClase]$ gcc -Wall -O2 -o Prog72 Prog72.c
[rrc@Pridd CClase]$ ./Prog72
Valor de pointer,   Pointer dereferenciado, Dirección de pointer
ptr1 = 0xbfb2da84,     *ptr1 =100,             &ptr1 = 0xbfb2da9c

Adición de int a un pointer:
ptr1 + 4 = 0xbfb2da94, *(ptr1 + 3) = 400

Valores después de ptr1++:
ptr1 = 0xbfb2da88, *ptr1 =200, &ptr1 = 0xbfb2da9c

Valores después de --ptr2:
ptr2 = 0xbfb2da88, *ptr2 = 200, &ptr2 = 0xbfb2da98

Pointers regresados a sus valores originales:
ptr1 = 0xbfb2da84, ptr2 = 0xbfb2da8c

Un pointer menos otro pointer:
ptr2 = 0xbfb2da8c, ptr1 = 0xbfb2da84, ptr2 - ptr1 = 2

Un pointer menos un intero:
ptr3 = 0xbfb2da94, ptr3 - 2 = 0xbfb2da8c
[rrc@Pridd CClase]$ 


Explicación