Depending on your environment it will either be (b) runtime error or (e) none of the above (or actually (c) compiler error if the compiler has any sense and prevents silly things early on).
int *p = 10; // assigns p as a pointer to int to address 10.
printf("%d\n", *p); // dereferences address 10 as an integer.
One of two things will occur during the printf. Firstly 10 is probably not a valid memory address, or at least not one a humble program is allowed to look at, so you will get a protection fault, that is a runtime error. Secondly 10 may be a valid memory address, but the changes of it containing 10, 5 or anyother given number are remote (probably exactly 2 to the power 32 on a 32-bit machine), hence (e) none of the above.