1

因此,当目标平台为 32 位时,我拥有可以在 Visual Studio 2005 中完美编译的现有代码。但是,它不适用于 64 位。我不明白为什么;事实上,我从来没有见过一个指针被转换为很久以前。它甚至是正确的 C++ 吗?

#define REAL double
typedef REAL* point; 
point *ptary; //(so it's basically double** ptary?)
long arylen = (long) ptary[0]; 

提前致谢。

4

1 回答 1

7

它似乎在 32 位系统上工作,因为指针和 long 都是 32 位宽。它无法在 64 位系统上工作,因为指针是 64 位宽的,但 long(可能)仍然只有 32 位宽。

您可以通过打印sizeof(double*)和轻松检查这一点sizeof(long)。我的猜测是,在 64 位系统上,输出将分别为 8 和 4。

如果您需要能够保存指针的整数类型,请使用intptr_tfrom <stdint.h>

于 2012-07-12T10:16:50.083 回答