There is something that has been bugging me for a while and I need an anwer for it,

```
char *p = "hello world";
p="wazzup";
p="Hey";

```

Here I declare an pointer to point to a string (or in other words I made a string by using a pointer)

I have had some strange results with this that i normally wouldnt have gotten if I used an char array string

```
cout <<p<< endl; //"Hey" Gets printer
cout <<p+8<< endl; // I kept adding numbers till "wazzup" got printed
cout <<p+29<< endl; // No matter how much I increment, I cant print "Hello World"

```

So my question is: 

When I change the value that a char pointer is pointing to. Does it 

* overwrite the original Data like it would do with char array;
* or it creates a new string right before it in the memory and points to it;
* or does it add the new string at the begining of the old one(including null);
* or does it create a new string in a new place in the memory and I was able to print "wazzup" only by chance