Why would you expect it to throw an exception?
By default, C# code is unchecked, which means that overflows and such are just silently ignored. You can find your current project settings for this setting by going to the project properties, Build-tab, and clicking on the Advanced button in the tab-contents. In the dialog that appears, you should have a "Check for arithmetic overflow/underflow". This setting is by default unchecked.
In this case, you're incrementing the first byte of the 32-bit (4-byte) int-value x, by going through a pointer cast as c, and you're incrementing it 300 times.
This increments it 256 times, which results in it being back to 0, and then another 44 times. Since it started at 1, it is now 45.
You can easily test this by executing the following code:
Byte b = 255;
b++;
Console.Out.WriteLine("b=" + b);
You'll get:
b=0
not an overflow exception.
Having said all that, you should probably not use pointers and unsafe code until you actually really need it.