#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int b, *pb;
char *pb2;
char *pb3;
//&b = 0x001af74
pb = &b + 1; //0x001af78 int*
pb2 = (char*)&b + sizeof(b); //0x001af78 char*
pb3 = (char*)&b + 1; //0x001af75 char*
printf("&b=%#x, pb=%#x, pb2=%#x,pb3=%#x\n", &b, pb, pb2, pb3);
int a[5]={1,2,3,4,5}, *pa;
char *pa2;
//&a = 0x002cfc00 int[5]*
pa = (int*)(&a + 1); //pa = 0x002cfc14 int*
pa2 = (char*)&a + sizeof(a); //pa2 = 0x002cfc14 char*
//(int*)&a + 1 = 0x002cfc04 &a + 1 = 0x002cfc14
printf("\nDiff: &a=%#x, %#x, %#x\n", &a, (int*)&a + 1, &a + 1); // 两者是有区别的
printf("&a=%#x, pa=%#x, pa2=%#x\n", &a, pa, pa2);
printf("Equal2=%d\n", (void*)pa == (void*)pa2 );
puts("结论: &a + 1 == (char*)&a + sizeof(a)\n");
return 0;
}