时光荏苒..
全部博文(453)
分类: C/C++
2013-01-18 14:36:20
ubuntu 下 gcc --version 4.4.3
sizeof(int *) = 8;
sizeof(long) = 8;
跟正常预期的 非常不同。 非常另类的编译器啊, 简直就是害虫啊。
暂时不考虑 这个编译器的情况! 还是 以 正常编译器 期望值来 解释问题。
分析:
int *ptr;
sizeof(ptr) = 8;
p ptr (int *)0x601030;
p ptr+1 (int *) 0x601034;
相差是4 而不是8 : 因为 +1 所增加的 是 指向的类型的 大小,而不是 自己本身的大小! 因此 是 4 因为sizeof(int) 为4. 虽然 sizeof(int *)是8.
在 上面的 编译器下:
改的只是 s.i 及其下面的4 字节对齐的地址的数值。
根本没有修改 s.p 因此也不会 崩溃。