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

Ami*_*mar 4 c c++ pointers pthreads

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

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

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

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

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

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

Jen*_*edt 5

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

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