int a[5] = {1,3,5,7,9};
int *ptr =(int*)(&a+1);
int b = *(ptr - 1);
以上代码运行结束后,b的值为9;
因为:
1)&a 后得到的值的类型为int (*)[5],是一个数组指针,其值加1,指针向后偏移的值为所指向指针数组所占内存的大小的值,即为20;
2)int *ptr = (int*)(&a+1);这行代码运行结束之后,ptr指向数组a最后一个元素的地址,加上4个字节的位置。
3)int b = *(ptr - 1);此时,由于ptr是int *类型的,所以ptr - 1,ptr所指位置向前移动4个字节,即指向了数组a中最后一个元素所在的内存。
总结:
1)此方法可用于找到数组的最后一个元素。
2)当一个指针加1时,指针移动的字节数,跟指针所指向的空间的大小有关。指向一个数组,他移动的量就是那个数组所占内存大小的值。