I have a C program that does the following two operations:
struct element *e = (struct element*) malloc(sizeof(struct element));
long unsigned addr = (long unsigned) e;
From this, addr has the decimal value of the pointer. I can convert addr back to an element pointer and use that to get the element from memory.
I am wondering how many possible values addr can be. I know the maximum value of long unsigned is about 4.3 billion, but can I really have an addr value of 1? Is there a certain range of numbers that I can get, and what is that range dependent on, if anything?
 
    