#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int a[5] = {1,2,3,4,5};
cout<<sizeof(a)<<endl;
int *ptr1 = (int *)(&a+1);
int *ptr2 = (int *)((int)a+1);
cout<<hex<<ptr1[-1]<<endl<<hex<<*ptr2<<endl; // negative index!
cout<<dec<<sizeof(int)<<" "<<sizeof(a)<<" "<<sizeof(ptr1)<<endl; // remember to change back to dec!
system("pause");
return 0;
}
running result:
20
5
2000000
4 20 4
explanation:
1) sizeof(a) = 5*4
2) note that &a is the address of a, (&a+1) points to a[5] => ptr[-1] points to a[4]
3) 32-bit x86 system => little-endian
a[0] a[1]
0x01 00 00 00 0x02 00 00 00
((int)a+1) points to the second byte of a[0] => ptr2 points to "00 00 00 02" => 0x02000000