将原始数据类型转换为void指针类型

我正在读这里的 pthreads。 在一个例子中,他们给出了这个源代码。

在创建线程时,它们传递一个long类型,类型为void *类型到函数!

在函数内部,它们接收此值并反向转换以获得长值。

Q1:是否允许将指针类型转换为原始数据类型和副verca(在C和C ++中)?

Q2。 如果是这样,这样做是好事吗? 它们不应该创建指向这个long类型的指针,然后将此指针类型转换为void *并将其传递给函数。

这种将原始类型转换为指针类型的想法我觉得很困惑? 可以理解,从任何指针类型转换为void *,但原始数据类型如何存储在void *类型中? 是否有可能在特定系统上,基本类型的大小可能会大于为指针类型分配的大小?

Q1:是的,但它是实现定义的(=平台依赖)这是否有效。 一个更安全的版本将使用uintptr_t而不是long

Q2:风格绝对不好。 通过分配long并传递地址,正确地执行此操作不会有太多性能损失。