如何获取指针指向的值的内存地址?在我的情况下,它是一个无效指针.只是将它分配给uint给了我这个错误:
Error 1 error C2440: 'return' : cannot convert from 'void *' to 'UInt32'
Run Code Online (Sandbox Code Playgroud)
谢谢!
Ara*_*raK 12
std::size_t address = reinterpret_cast<std::size_t>(voidptr);
// sizeof(size_t) must be greater or equal to sizeof(void*)
// for the above line to work correctly.
Run Code Online (Sandbox Code Playgroud)
@保罗谢
我认为这是足以转化void*到size_t在这一特定问题的原因有三:
提问者没有说明他是否想要便携式解决方案.他说,这与他合作.我不知道究竟是什么意思,但我很清楚他在Windows或其他受保护模式的系统上工作IA-32.这意味着将指针转换为整数是该系统上定义的操作,即使它没有由标准C++定义.
其次,我建议首先转换的指针int,这显然是毫无意义litb和jalf我看了.我纠正了我所犯的错误,并替换int为size_t.
最后,我努力寻找与您提出的标准解决方案相关的内容.不幸的是,我找不到任何相关的东西.我有这个参考:ANSI ISO IEC 14882 2003.我认为sellibitze指出它将成为未来标准的一部分.我真的不知道C,显然C99推出了这个完美的解决方案.我希望有人能用C++向我展示一个可移植的解决方案.
请不要犹豫,纠正我的错误,我仍然是大学的学生:)
谢谢,
Pau*_*ieh 11
C和C++ 中的指针是某种抽象形式的存储器地址的实施例.您可以获得指针的实现特定字符串解释:
printf ("%p", voidPointer);
Run Code Online (Sandbox Code Playgroud)
另一种方法是将其强制转换为intptr_t:
(intptr_t) voidPointer;
Run Code Online (Sandbox Code Playgroud)
C++中的NULL指针定义为等于"0",因此可能在上面的操作中得到(intptr_t)0的等价.但是,您仍然需要将您作为内存地址解释为具体的实现知识.
关键在于,在使用奇怪的内存模型(如16位x86 DOS编译器)的平台中,它们具有偏移量作为其内存模型的段,可以通过多种方式解释指针.在原始地址表示中,NULL可以是DS:0或SS:0,而不仅仅是普通的0.