fork download
  1. #include <stdio.h>
  2.  
  3. void swap(void **left, void **right)
  4. {
  5. puts("\nswap function:\n\n");
  6.  
  7. printf("left : %p - *left: %p - **left(should be a): %i\n",
  8. left, *left, *((int *)*left));
  9. printf("right : %p - *right: %p - **right(should be b): %i\n\n",
  10. right, *right, *((int *)*right));
  11.  
  12. void *PNT_left = (void *) left;
  13. void *PNT_right = (void *) right;
  14.  
  15. puts("Before swap:");
  16. printf("PNT_left: %p - *PNT_left: %p\n", (int *)PNT_left, *((int *)PNT_left));
  17. printf("PNT_right: %p - *PNT_right: %p\n\n", (int *)PNT_right, *((int *)PNT_right));
  18.  
  19. /* swap pointers of pointers*/
  20. void *tmpPNT = PNT_left;
  21. PNT_left = PNT_right;
  22. PNT_right = tmpPNT;
  23.  
  24. puts("Pointer of pointer swapped:");
  25. printf("PNT_left: %p - *PNT_left: %p\n", (int *)PNT_left, *((int *)PNT_left));
  26. printf("PNT_right: %p - *PNT_right: %p\n\n", (int *)PNT_right, *((int *)PNT_right));
  27.  
  28. /* swap pointers*/
  29. tmpPNT = *(int *)PNT_left;
  30. *((int*)PNT_left) = *((int *)PNT_right);
  31. *((int*)PNT_right) = tmpPNT;
  32.  
  33. puts("Pointer swapped:");
  34. printf("PNT_left: %p - *PNT_left: %p\n", (int *)PNT_left, *((int *)PNT_left));
  35. printf("PNT_right: %p - *PNT_right: %p\n\n", (int *)PNT_right, *((int *)PNT_right));
  36.  
  37. puts("Info:");
  38. printf("left : %p - *left: %p - **left: %i\n",
  39. left, *left, *((int *)*left));
  40. printf("right : %p - *right: %p - **right: %i\n\n",
  41. right, *right, *((int *)*right));
  42.  
  43. puts("End Swap function.\n\n\n");
  44. return;
  45. }
  46.  
  47. int main(void)
  48. {
  49. int a = 1, b = 2;
  50. int *ap, *bp;
  51. ap = &a;
  52. bp = &b;
  53.  
  54. puts("Before - Info:");
  55. printf(" a: %i - b: %i\n", a, b);
  56. printf(" &a: %p - &b: %p\n", &a, &b);
  57. printf(" ap: %p - bp: %p\n", ap, bp);
  58.  
  59. swap(&ap, &bp);
  60.  
  61. puts("After - Info:");
  62. printf(" a: %i - b: %i\n", a, b);
  63. printf(" ap: %p - bp: %p\n", ap, bp);
  64. return 0;
  65. }
  66.  
  67.  
Success #stdin #stdout 0s 2160KB
stdin
Standard input is empty
stdout
Before - Info:
 a: 1   -    b: 2
 &a: 0xbf89a340   -    &b: 0xbf89a344
 ap: 0xbf89a340   -    bp: 0xbf89a344

swap function:


left :  0xbf89a348   -   *left:  0xbf89a340   -   **left(should be a):  1
right : 0xbf89a34c   -   *right: 0xbf89a344   -   **right(should be b): 2

Before swap:
PNT_left:  0xbf89a348   -   *PNT_left: 0xbf89a340
PNT_right: 0xbf89a34c   -   *PNT_right: 0xbf89a344

Pointer of pointer swapped:
PNT_left:  0xbf89a34c   -   *PNT_left: 0xbf89a344
PNT_right: 0xbf89a348   -   *PNT_right: 0xbf89a340

Pointer swapped:
PNT_left:  0xbf89a34c   -   *PNT_left: 0xbf89a340
PNT_right: 0xbf89a348   -   *PNT_right: 0xbf89a344

Info:
left :  0xbf89a348   -   *left:  0xbf89a344   -   **left:  2
right : 0xbf89a34c   -   *right: 0xbf89a340   -   **right: 1

End Swap function.



After - Info:
 a: 1   -    b: 2
 ap: 0xbf89a344   -    bp: 0xbf89a340