The 3 functions are the same. The difference is the argument you pass to them.
&p: get the reference (memory adress) of the variable p.
*p: assumes that p is a memory address and get the value that is stored in that position. In this case, you will get a sigsev because you are trying to access to position 3 of memory system.
p: get p, in that case 3.
The functions receive a pointer, and prints the value storage in that position as an integer.
solved How are these C functions different? [closed]