这是一个创建于 1783 天前的主题,其中的信息可能已经有所发展或是发生改变。
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,想了很久没算明白,请大佬们指点下谢谢。
 |
|
1
knewbie 2020-05-15 15:51:54 +08:00
第一个是指针类型:win32 平台,指针长度是 4, 第二个输出在计算时会将 int 提升为 uint64 类型的,最终结果还是 uint64,所以 sizeof 的大小还是 uint64 类型的大小,即是 8
|
 |
|
2
demos 2020-05-15 16:01:09 +08:00
我傻了 printf("%d %d\r\n", sizeof(num64 + (p1 - p2)), sizeof(num64 + (n1 - n2))); 这样就是 8,8 了 谢谢老哥 结帖
|