因此,当目标平台为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];
提前致谢。
答案 0 :(得分:7)
它似乎适用于32位系统,因为指针和long都是32位宽。它无法在64位系统上工作,因为指针是64位宽,但long(可能)仍然只有32位宽。
您可以通过打印sizeof(double*)
和sizeof(long)
轻松检查此问题。我的猜测是64位系统的输出分别为8和4。
如果您需要一个能够容纳指针的整数类型,请使用intptr_t
中的<stdint.h>
。