Pointers


#include <stdio.h>

void swap(int *, int *);

int main(void)
{
  int one = 11, two = 22;
  int *ptr1, *ptr2;

  ptr1 = &one;
  ptr2 = &two;

  printf("\nInitial values");
  printf("\nAddress of one = %x two = %x ptr1 = %x ptr2 = %x\n", 
          &one, &two, &ptr1, &ptr2);
  printf("Value of one = %d two = %d ptr1 = %x ptr2 = %x\n", 
          one, two, ptr1, ptr2);
  printf("Value of *ptr1 = %d *ptr2 = %d", *ptr1, *ptr2);

  swap(&one, &two);
  printf("\nAfter swapping one and two");
  printf("\nAddress of one = %x two = %x ptr1 = %x ptr2 = %x\n", 
          &one, &two, &ptr1, &ptr2);
  printf("Value of one = %d two = %d ptr1 = %x ptr2 = %x\n", 
          one, two, ptr1, ptr2);
  printf("Value of *ptr1 = %d *ptr2 = %d\n", *ptr1, *ptr2);

  swap(ptr1, ptr2);
  printf("After swapping ptr1 and ptr2");
  printf("\nAddress of one = %x two = %x ptr1 = %x ptr2 = %x\n", 
          &one, &two, &ptr1, &ptr2);
  printf("Value of one = %d two = %d ptr1 = %x ptr2 = %x\n", 
          one, two, ptr1, ptr2);
  printf("Value of *ptr1 = %d *ptr2 = %d\n", *ptr1, *ptr2);

  return (0);
}

void swap(int *one, int *two)
{
  int temp = 0;
   printf("\nAt start of swap ");
   printf("\nAddress of one %x two %x temp %x ", 
            &one, &two, &temp);
   printf("\nValue of one %x two %x temp %d ", 
            one, two, temp);
   printf("\nValue of *one %d *two %d ", *one, *two);
   temp = *one;
   *one = *two;
   *two = temp;
   printf("\nAt end of swap ");
   printf("\nAddress of one %x two %x temp %x ", 
            &one, &two, &temp);
   printf("\nValue of one %x two %x temp %d ", 
            one, two, temp);
   printf("\nValue of *one %d *two %d ", *one, *two);
}




Initial values 
Address of one = 1ffff128 two = 1ffff120 ptr1 = 1ffff118 ptr2 = 1ffff110
Value of one = 11 two = 22 ptr1 = 1ffff128 ptr2 = 1ffff120
Value of *ptr1 = 11 *ptr2 = 22


At start of swap 
Address of one 1ffff0f0 two 1ffff0e8 temp 1ffff0e0 
Value of one 1ffff128 two 1ffff120 temp 0 
Value of *one 11 *two 22 

At end of swap 
Address of one 1ffff0f0 two 1ffff0e8 temp 1ffff0e0 
Value of one 1ffff128 two 1ffff120 temp 11 
Value of *one 22 *two 11 

After swapping one and two
Address of one = 1ffff128 two = 1ffff120 ptr1 = 1ffff118 ptr2 = 1ffff110
Value of one = 22 two = 11 ptr1 = 1ffff128 ptr2 = 1ffff120
Value of *ptr1 = 22 *ptr2 = 11

At start of swap 
Address of one 1ffff0f0 two 1ffff0e8 temp 1ffff0e0 
Value of one 1ffff128 two 1ffff120 temp 0 
Value of *one 22 *two 11 

At end of swap 
Address of one 1ffff0f0 two 1ffff0e8 temp 1ffff0e0 
Value of one 1ffff128 two 1ffff120 temp 22 
Value of *one 11 *two 22 
After swapping ptr1 and ptr2

Address of one = 1ffff128 two = 1ffff120 ptr1 = 1ffff118 ptr2 = 1ffff110
Value of one = 11 two = 22 ptr1 = 1ffff128 ptr2 = 1ffff120
Value of *ptr1 = 11 *ptr2 = 22