// examples of addresses and pointers #include int global_int; int array[10]; int initialized = 5; main(int argc, char *argv[]) { int local_int, i, *ip; // look at some initial variable values printf("global_int is at 0x%x and contains %d\n", &global_int, global_int); printf("local_int is at 0x%x and contains %d\n", &local_int, local_int); printf("initialized is at 0x%x and contains %d\n", &initialized, initialized); // pointers can point different places at different times ip = &global_int; *ip = 5; ip = &local_int; *ip = 23; ip = &initialized; *ip = 101; // we have indirectly changed the variables' values printf("global_int is at 0x%x and contains %d\n", &global_int, global_int); printf("local_int is at 0x%x and contains %d\n", &local_int, local_int); printf("initialized is at 0x%x and contains %d\n", &initialized, initialized); // an array name is simply a shorthand for the address of element 0 printf("array is 0x%x and &array[0] is also 0x%x\n", array, &array[0]); // think about why array[1] is 4 bytes higher than array[0] printf("array[1] is at 0x%x\n", &array[1]); // it is important to understand pointer arithmetic !!! printf("array + 1 is also 0x%x\n", array + 1); // strings also have addresses and can act like character arrays printf("\"my string\" is at 0x%x\n", "my string"); printf("\"my string\"[5] is %c\n", "my string"[5]); // you can even get the address of a function but do not need the & printf("main is at 0x%x\n", main); ip = (int *)main; printf("your first binary instruction code is 0x%x\n", *ip); // we access the argument list as an array of strings for(i = 0; i < argc; i++) printf("argv[%d] is 0x%x -> %s\n", i, argv[i], argv[i]); return(0); }