Listing 4

/* CUJ example, Stephen D. Williams, SDW Systems */
#include <stdio.h>
main()
 {
 char *ptr = "hi there george";

 puts(ptr);

 /*  ((long *)&ptr)++; <---incorrect */

 (*((long**)&ptr))++;
 puts(ptr);

 #define ptr_type(type, prt) (*((type**)&ptr))
  puts((char *)++(ptr_type(long,ptr)));
 #undef ptr_type /*  scoped macro*/
  }

 /*
 output:
 hi there george
 here george
  george
 */