(int *)0是int型指针,+4以后等于移位sizeof(int)*4=16,即指针地址后移16,然后加int强制为整数,最终xi为16
int ((int*)0 + 4);//==16
int ((int*)1 + 4);// ==17
int ((int*)2 + 4); //==18
像这个是初始地址不一样,你移位的距离都是16,最后地址是你初始地址+移位的距离,所以三个答案是没有错的。
这个貌似很多系统上根本不能编译通过吧,因为int*转换为int类型,如果所在机器的int*包涵64位信息,而int仅能表达32位信息,那么这种转换将丢失精度而无法执行。
int ((int*)0 + 4);//==16
int ((int*)1 + 4);// ==17
int ((int*)2 + 4); //==18
------------------------------------
如果理解为一楼的 sizeof(int)*4 那以上结果应该相同吧?
无解中。。。
数据类型的长度并不是固定的,在不同编译器上长度定义是不一样的。例如在TC、VC、DEV c++中长度都是不一样的,建议使用编译器前最好弄明白不同编译器的长度,以免在编程中出现溢出。用一个函数sizeof就可以方便查看不同编译器中数据类型长度。希望对你有用。