By referring to <http://www.cplusplus.com/doc/tutorial/dynamic/>, it is said that the `new` operator returns a pointer to the beginning of the new block of memory allocated. Let's assume again that any pointer has the feature of pointer arithmetic, which can make it true that `p + 1` points to the next position in memory if `p` is a pointer.
Based on the above assumptions, I have tried the following block,

```
#include <iostream>
using namespace std;
int main(){
    int * ptr = (new int [4]) + 1;
    ptr[3] = 2;
    cout << ptr[3] << endl;
    /*Before delete the dynamic allocated memory, 
      it should be necessary to let ptr point to the 
      beginning of it, add one line to do that:
      --ptr;*/
    delete [] ptr;
}

```

I expected that `ptr[3]` should goes beyond the range of newly allocated memory. However, the result still give `2`. Why the pointer arithmetic become useless? Or is it really `new Type` returns an object of `*Type`?

Thanks for any help.