代码之家  ›  专栏  ›  技术社区  ›  Cheeso

在x64上,指针减法的正确类型是什么?

  •  1
  • Cheeso  · 技术社区  · 14 年前

    我只是从x64编译开始。

    对于32位编译,这是可行的:

    char * p1 = ....
    char * p3 = ... 
    int delta = p3 - p1;
    

    但是如果我为x64编译,我会得到一个警告:

     warning C4244: 'initializing' : conversion from '__int64' to 'int', 
          possible loss of data
    

    在x86和x64编译中,用来表示两个指针之间差异的正确类型是什么?

    我知道我可以在x64编译中使用\uu int64,但我希望它也适用于x86,并且我不希望嵌入 #ifdef 我来做。

    1 回复  |  直到 14 年前
        1
  •  7
  •   LukeN    14 年前

    有一种特殊的指针差分类型。

    #include <cstddef>
    ptrdiff_t
    

    我不能测试这个,因为我这里没有VC++(Linux),但是 ptrdiff_t 用于指针差异。GCC确认:)。

    [更新:C++使用] std::ptrdiff_t ,感谢sbi!]

    推荐文章