请教下 C++类型转换的问题

2020-05-15 15:45:31 +08:00
 demos
int main(int argc, char* argv[])
{
uint64_t num64 = 0x1122334455667788;
char* p1 = 0;
char* p2 = 0;
int n1 = 0;
int n2 = 0;

printf("%d %d\r\n", sizeof(num64 + p1 - p2), sizeof(num64 + n1 - n2));
return 0;
}

我在 vs2019 上编译成 Win32/Release 运行这段代码,会输出 4 8
看起来笫一个运算结果被转换成了 int 型,而笫二个运算是 uint64_t 型
理论上来说一个长类型(uint64_t)和一个短类型(int)的运算结果是长类型,结果应该两个都是 8 。
但是笫一个结果是 4,想了很久没算明白,请大佬们指点下谢谢。
1204 次点击
所在节点    C++
2 条回复
knewbie
2020-05-15 15:51:54 +08:00
第一个是指针类型:win32 平台,指针长度是 4, 第二个输出在计算时会将 int 提升为 uint64 类型的,最终结果还是 uint64,所以 sizeof 的大小还是 uint64 类型的大小,即是 8
demos
2020-05-15 16:01:09 +08:00
我傻了
printf("%d %d\r\n", sizeof(num64 + (p1 - p2)), sizeof(num64 + (n1 - n2)));
这样就是 8,8 了
谢谢老哥
结帖

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX