作为一个实验:
\n\n我有一个带有签名的假设函数:void func(void *),我必须在代码中传递一个整数值:func(42)。它必须使用文字整数来完成。
是否有 \xe2\x80\x9cright\xe2\x80\x9d 方法来传递整数值,例如 \xe2\x80\x9chacked\xe2\x80\x9d 作为指针中的地址(例如地址 0x2A),并以某种方式将其转换回整数(0x2A 示例为 42)。所有这一切都没有意外行为?
\n\n简而言之:能够将指针地址转换为保存地址编号的整数。
\nC 和 C++ 标准都明确允许这种转换。
C99 6.3.2.3.5:
整数可以转换为任何指针类型。除非前面指定,否则结果是实现定义的,可能未正确对齐,可能不指向引用类型的实体,并且可能是陷阱表示。
C++11 5.2.10.5
整型或枚举类型的值可以显式转换为指针。
因此,您的调用func((void*)42)应该适用于所有符合标准的编译器。
比如说,将文字整数传递给需要 void 指针的参数并且在函数中保持整数不变的最正确方法是什么?
这种将文字整数作为参数传递给需要 a 的函数的方法可以保证void*原始整数在函数中不会受到影响,因为参数是按值传递的。