There is no difference between char * p1 = "Wat is je naam? "; and char zin1[] = "Wat is je naam? "; except that you can't modify the first one (in fact it is not correct. It should be constchar*, but compilers for some reason allow it).
for p4 you'll have to allocate some memory (with new and don't forget to delete it)
A pointer (char * p1) can basically be seen as a variable pointing to the start of an array. So, p1 points to the array at some address in memory where the array "Wat is je naam? " is stored". That said, you can just replace zin1, zin2 and zin3 with p1, p2, and p3.
You cannot do the same with p4 directly. The difference is that the compiler does not know the length of the data at p4. As you can see in your code however, the length of zin4 is given (80). Now, if you let p4 point to zin4 it will work: