12.2.2 Assign an Address.

When you declare a reference, you have to assign a value to it. With pointers, you don’t really have to do that. But you already know that an declaring an integer without assigning it a value results in a random number. The same happens with pointers. A new pointer points to a random address in memory. This is not wrong, but it will most likely crash your application when you try to use it.

 
int * i; // could point to anything!  

In most cases you will want to assign an actual address. This can be done by assigning the address of an existing variable. Mind though, you’ll need to assign the address of the variabel, not the value it contains.

In other words, this is wrong:

 
int i = 42; 
int * p = i; // tries to assign the value of i as an address in p  

The pass the address of a variable, use and ampersand (&). Like this:

 
int   i = 42; 
int * p = &i; // declaration and initialisation 
int * p;      // declaration only 
p       = &i; // assign an address 
5p       =  i; // auch! wrong!!!