在long(C ++)中存储double *

时间:2012-07-12 10:12:16

标签: c++ winapi pointers long-integer win64

因此,当目标平台为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]; 

提前致谢。

1 个答案:

答案 0 :(得分:7)

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

您可以通过打印sizeof(double*)sizeof(long)轻松检查此问题。我的猜测是64位系统的输出分别为8和4。

如果您需要一个能够容纳指针的整数类型,请使用intptr_t中的<stdint.h>