V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
demos
V2EX  ›  C++

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

  •  
  •   demos · 2020-05-15 15:45:31 +08:00 · 1355 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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,想了很久没算明白,请大佬们指点下谢谢。
    knewbie
        1
    knewbie  
       2020-05-15 15:51:54 +08:00
    第一个是指针类型:win32 平台,指针长度是 4, 第二个输出在计算时会将 int 提升为 uint64 类型的,最终结果还是 uint64,所以 sizeof 的大小还是 uint64 类型的大小,即是 8
    demos
        2
    demos  
    OP
       2020-05-15 16:01:09 +08:00
    我傻了
    printf("%d %d\r\n", sizeof(num64 + (p1 - p2)), sizeof(num64 + (n1 - n2)));
    这样就是 8,8 了
    谢谢老哥
    结帖
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.