Why should I use double pointer variable to receive another pointer's address(&ptr1)
c, pointer-to-pointer, pointers
Solution
Simply put, pointers are not addresses, they are varibles representing an address with a type. So the types have be compatible for pointers to assign (with the exception of `void *` generic pointer).
ptr2 = &ptr1;
`ptr1` has a type of `int *`, so `&ptr1` has a type of `int **`, it's not the same with `ptr2`, which has a type of `int *`.
Reference: C99 6.5.16.1 Simple assignment
both operands are pointers to qualified or unqualified versions of compatible types, and the type pointed to by the left has all the qualifiers of the type pointed to by the right.
Problem
``` int num = 45,*ptr1,*ptr2; ptr1=# ptr2=&ptr1; printf("%d\n",*ptr1); ``` I've been thinking about this question for a while, but couldn't find a way to understand it,why `&ptr1` can not be assigned to `ptr2` in line 3, `&ptr1` is a pointer's address,this address is no different from other address like an address of an integer, say ``` int a=1; ptr2=&a; ``` Which means that I can assign an integer's address to a pointer,but not a pointer's address to a pointer,what differences between these two "address" could possibly make them different? Address of common variables can be assigned to single pointer,but address of pointers can not be assigned to single pointer? I know the right way to do it is use double pointer to declare `ptr2`,but why single pointer can't?