上はネタ本の通りです。unsignedの場合は、純粋のメモリのアドレスの計算になるようです。ポインタの場合は、この場合は+1でアドレスは+4するようです。int32を使ってるようです。
大きな違いは、x[0]のアドレスをポインタにセットの仕方が違います。Cではp=&x[0]、多分int* p=&x[0];でも良いと思います。C#では、int *p=(int *)x[0];と書いてます。なんで&が無いんですかね?C#では参照渡しのとき使っていたはずです。
上の図の通りで実行できるんですが、コンパイラは別の書き方に訂正したいようです。C言語とC#の違いですが、int *p, *q;と書けるのが、C言語。int *p; int *q;と書かないといけないのがC#のようです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます