FAQ #2: Why `int *p = &x` != `*p = &x`
FAQ #2. Why int *p = &x
!= *p = &x
A Declaration+Initialization vs. Dereferencing
int x = 1;
// Declaring a pointer-to-integer and initializing it to address of x.
int *px = &x; // Compiles (Type Match)!
// Dereferencing px and assignment by address of integer
*px = &x; // Compiler Error (Type Mismatch)!
In other words,
int x = 1;
int *px = &x;
is equivalent to
int x = 1;
int *px;
px = &x;
Which is not equivalent to
int x = 1;
int *px;
*px = &x; // Compiler Error (Type Mismatch)!
Short Story
- Asterisk
*
in declarations expressions (int *p;
) means you are declaring a pointerp
. - Asterisk
*
in non-declaration expressions (*p;
) means you are dereferencing a pointer (get the variable pointed by the address inp
).
You can also make it simpler for your self if you wish.
int x = 1;
// To declare and initialize pointers to zero address,
// you can use either nullptr or 0.
int *px = nullptr;
px = &x;