如何正确地将文字整数作为 void 指针传递为参数,并使用其地址作为整数的实际值

1 c++ casting void-pointers

作为一个实验:

\n\n

我有一个带有签名的假设函数:void func(void *),我必须在代码中传递一个整数值:func(42)它必须使用文字整数来完成

\n\n

是否有 \xe2\x80\x9cright\xe2\x80\x9d 方法来传递整数值,例如 \xe2\x80\x9chacked\xe2\x80\x9d 作为指针中的地址(例如地址 0x2A),并以某种方式将其转换回整数(0x2A 示例为 42)。所有这一切都没有意外行为?

\n\n

简而言之:能够将指针地址转换为保存地址编号的整数。

\n

das*_*ght 5

C 和 C++ 标准都明确允许这种转换。

C99 6.3.2.3.5:

整数可以转换为任何指针类型。除非前面指定,否则结果是实现定义的,可能未正确对齐,可能不指向引用类型的实体,并且可能是陷阱表示。

C++11 5.2.10.5

整型或枚举类型的值可以显式转换为指针。

因此,您的调用func((void*)42)应该适用于所有符合标准的编译器。

比如说,将文字整数传递给需要 void 指针的参数并且在函数中保持整数不变的最正确方法是什么?

这种将文字整数作为参数传递给需要 a 的函数的方法可以保证void*原始整数在函数中不会受到影响,因为参数是按值传递的。

  • @Alec我认为你应该失去态度,记住人们正在努力提供帮助,即使你的要求不是很清楚。 (3认同)