null1
is a null pointer, its definition #define null1 ((void*)0)
is one of the accepted definitions for a null pointer.
val
is a macro expanding to the plain integer constant 2
. Casting 2
as (int)
has no effect, 2
is already an int
constant value.
Storing a value to a null pointer has undefined behavior. A segmentation fault is one the possible effect of undefined behavior. A rather useful one since it allows the debugger to point to the problem immediately.
Casting any other integer value as (int *)
has undefined behavior too: p = (int *)val; *p = val;
is very likely to cause the same segmentation fault, but may have some other unexpected side effects, depending on the target platform specifics: if 2
happens to be the address of the self-destruct trigger port, all bets are off.