有例子如下sizeof(int)==4: #include <stdio.h> #include <stdlib.h> int main() { int i[5]; int j; i[0]=65536+2; i[1]=65536*3+4; j=*((int *)((char *)i+2)); printf( "size of int is %d\nj=%d ",sizeof(int),j); return 0; }
********************************************************************************************* 一下代码 int main() { int a[4]={0,0,0,0}; int *pi; pi=(int *)(((char *)a)+1); *pi=3; printf( "a0 is %d\n " "a1 is %d\n " "pi is %d\n ",a[0],a[1],*pi); printf( "sizeof int is %d\n ",sizeof(int)); return 0; } 同样用GCC编译 HP_UX上是出总线错误,(其他UNIX机器上也出,以前做过) 但拿到WINDOWS 2000机器上就好使。 a0 is 768 a1 is 0 pi is 3 sizeof int is 4 现不考虑字节序问题,为什么在windows上就好使呢,难道编译出来的不是32位的程序。难道还作了什么特殊的处理。理论上已改出错才对。怪异 ************************************************************************************************** 不知道你用的是哪种unix,我记得在Solaris是会存在类似的bus error的。 我在linux和sco下进行一些测试,即使你采用编译器默认的对齐方式,对于奇地址强制转化为int地址的情况,程序运行正常,在linux和sco下编译器从栈中为非对齐的结构体非配空间的方式有点小差异,如上所述的结构体,linux是从偶地址开始,sco是从奇地址开始。。。