eg 1
int x;
int *ptr = &x; This is correct since an integer pointer is used to store the address of an integer.
eg 2
int *ptr = &ptr; This is not a safe way of programming. Its an incompatible pointer. It's purpose is to store the address of an integer not a pointer. To store the address of a pointer, you need a DOUBLE pointer.
What are you trying to achieve by the way?