i'd like to know if there is a sort of implicit conversion between variables when using a **pointer to constant integer** , 
for example , if i use an address of a variable type **int** or **const int** it accepts to store it , 
however if i use a normal **pointer to int** it doesn't allow storing the address of the **const int** type,why is this?, thanks in advance 

```
int i=4;
const int ii=4;

//pointer to constant int 
const int *pci=&i; //OK.
pci=&ii; //OK.
int *pi=&ii; //ERROR invalid conversion.

```