I assume your compiler is rather old.
Look at this code (modified loop)
for(int i=0;i<5;i++)
out<<&(ptarray[i])<<"\t"<<ptarray[i]<<endl; // (10)
And this is my output:
0x22ff30 0x22ff58
0x22ff34 0x22ff5c
0x22ff38 0x22ff54
0x22ff3c 0x22ff50
0x22ff40 0x22ff58
This makes sense. First column represents addresses of array elements. Since arrays are continuos in memory (on most compilers I work with, althought I'm not sure if this is guaranteed by the Standard) and on most 32 bit machines size(void*) is 4 bytes (this is also not guaranteed) first column rows are evenly spaced by 4 bytes.
Second column is a different story. First two rows represents addresses of array elements and difference is 4 byte. Also, last element of array hold address of first element of "ar" (same as ptarray[0]), so that's ok.
Other elements hold addresses of variables var1 and var2. There is no guarantee they will be evenly spaced, and probably in most cases they won't.
Is this clear to you?