案例1
int a[5] = { 1,2,3,4,5 };
int *ptr = (int *)(&a + 1);
cout << *(a + 1) << " " << *(ptr - 1) << endl;
打印结果是:2,5
这里的难点在于*(ptr-1),&a+1注意a没带括号,那么这里a代表的是数组的地址,那么&a+1就是加一个数组大小
案例2
int arr[] = { 21,22,23,24,25 };
int *ptr = arr;
*(ptr++) += 100;
cout << "*ptr = " << *ptr << " "<<"*(ptr++) = " << *(ptr++) << endl;
这个的难点在于*(ptr++) += 100;这一句和最后的打印语句,先说第一个难点,(ptr++) += 100和(ptr++) =(ptr++)+100是不等价的前者只自增一次
再说第二个难点,要记住,打印语句是从右向左运算的就行,printf也是