小涛有一次给我看了一篇博客:http://c.biancheng.net/cpp/html/476.html.
int main() { int a[4]={1,2,3,4}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%x,%x",ptr1[-1],*ptr2); return 0; }
那个强制转换给我搞懵了。a不是本来就是一个int形的4字节地址吗?
后来看了下面的注解才明白。a确实是数组的首地址,强制转换后是a的第一个字节的地址。
即a只是个表示地址的标识符,a+1,这个1的大小与a数组的类型有关,表示加上一个元素大小的偏移量。
以前看书真是太不仔细了。
由此也得出判断操作系统大小端的方式,直接上代码:
int main(int argc,char** argv) { short a = 0x1122; if (*(char*)&a == 0x22) { printf("small "); } else { printf("big "); } return 0; }