"expression must have a constant value"
As the error says, When you initialize a variable, it should be constant.
In this case,
extern int externed_variable;
int variable = externed_variable;
You are initializing with a "variable" and variable gets value run-time.
But when you do this:
extern int externed_variable;
int *variable_ptr = &externed_variable;
You are assigning address, addresses for global variable are decided at Compile time and hence, Constant.
And you are allowed to init a variable with constant value.
So to answer you, As Addresses for global variables are assigned during compilation and are constant, you won't get error!
externkeyword is telling the compiler something like “Don’t’ worry about not finding this symbol here, it is declared elsewhere and we’ll let the linker figure it out”. Then when you use it on the next line, the compiler is saying “I don’t know what this is yet…”