请问一个C++方面的问题,求高手解答! int xi = int ((int*)0 + 4); 结果是 16 ,请问这是什么原理?

求详解!
2025-04-29 00:47:08
推荐回答(4个)
回答1:

(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,最后地址是你初始地址+移位的距离,所以三个答案是没有错的。

回答2:

这个貌似很多系统上根本不能编译通过吧,因为int*转换为int类型,如果所在机器的int*包涵64位信息,而int仅能表达32位信息,那么这种转换将丢失精度而无法执行。

回答3:

int ((int*)0 + 4);//==16
int ((int*)1 + 4);// ==17
int ((int*)2 + 4); //==18
------------------------------------
如果理解为一楼的 sizeof(int)*4 那以上结果应该相同吧?
无解中。。。

回答4:

数据类型的长度并不是固定的,在不同编译器上长度定义是不一样的。例如在TC、VC、DEV c++中长度都是不一样的,建议使用编译器前最好弄明白不同编译器的长度,以免在编程中出现溢出。用一个函数sizeof就可以方便查看不同编译器中数据类型长度。希望对你有用。