我怎么可以获取存储器地址的价值的一个指点?在我的情况下,它是无效的指针。只是将它分配给uint给了我这个错误:

Error   1   error C2440: 'return' : cannot convert from 'void *' to 'UInt32'

谢谢!

有帮助吗?

解决方案

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.

@保罗谢
我认为这是足够的转换 void*size_t 在这个具体问题的原因有三:

  • 提问者没有指定,如果他 想要一个便携式解决方案或没有。他 说,它曾与他。我不知道到底是什么 这意味着,但 这是我清楚他 工作IA-32Windows或其他 系统保护模式。那 置换指针指向 整数就是一个定义操作上 这个系统甚至如果这不是定义的标准。

  • 第二,我提出了第一个转换的指针 int 这显然是毫无意义 litbjalf 显示出我。我纠正的错误我做的,并取代 intsize_t.

  • 最后,我想我很难找到的东西有关什么你建议作为一个解决方案的标准。不幸的是,我找不到任何相关的。我有这个参考: ANSI ISO IEC14882 2003年.我认为sellibitze指出, 是的一部分,未来的标准。我真的不知道C,显然C99介绍了这个完美的解决方案。我想有人告诉我一个便携式解决在C++。

请,不要犹豫,以纠正我的错误,我还是个学生在大学:)

谢谢,

其他提示

一个指针,在C和C ++的就是的存储器地址的某些抽象形式的实施例。你可以得到一个指针的实现特定字符串的解释为:

printf ("%p", voidPointer);

另一种方法是将它转换为使用intptr_t:

(intptr_t) voidPointer;

在C ++的NULL指针被定义为等于“0”,所以大概你会得到(使用intptr_t)0的equiavlent在上述操作。但是它仍然是取决于你和任何执行特定的知识,你必须理解,作为一个内存地址。

的一点是,在使用奇异存储器模型,如16位x86 DOS的编译器中,具有与分段偏移作为其存储器模型平台,指针可以在许多方面进行解释。在原始地址表示NULL可能是DS:0或SS:0而不是只是一个普通的0

您需要的铸造 - 无论是reinterpret_cast(优选):

UInt32 address = reinterpret_cast<UInt32>( voidPointer );

或C样式转换(真的不推荐):

UInt32 address = (UInt32)voidPointer;

你可以得到一串表示的地址与sprintf()或显示它与printf()使用%p格式说明,e。g:

printf( "%p", voidptr ) ;

如果你只想要的地址,以执行指针算,投到一个适当的具体数据类型的指针,否则转换为一个整数如已经提出了建议。

在C ++我能够与打印尖地址:

cout << "Address: " << ((unsigned)my_ptr);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top