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

riy*_*noa 1 c++ winapi pointers win64 long-integer

因此,当目标平台为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]; 
Run Code Online (Sandbox Code Playgroud)

提前致谢.

fre*_*low 7

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

您可以轻松地打印出检查这个sizeof(double*)sizeof(long).我的猜测是64位系统的输出分别为8和4.

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