1. Wrong. The compiler will complain about trying to assign a pointer to a non-pointer. To that, you need at least this much code:
1 2 3 4 5 6
int p=(int)&i;
f(p);
//...
void f(int p){
*(int *)p=100;
}
It will compile, but DON'T do this.
2. The compiler will again complain about trying to assign a pointer to an integer, but it's even more dangerous than the previous case.
If you do *p=(int)&i;, the compiler will let it pass, but odds are that the program will crash when you try to run it because p is pointing to nothing valid, and the assignment tries to write to that location.