C ++指针中的这两种类型的值分配之间有何区别?

这两种变量值分配方式有何区别?

int x = 100;
int *valuePtr = &x;
*valuePtr = 20;

为什么我不能使用* int valuePtr = x;这条路 ?我会给出一个编译错误。但是在* int valuePtr =&x;之后然后* valuePtr = 20;不会给出编译错误。有人可以解释吗?