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

时间:2012-10-18 07:32:03

标签: c++ c pointers pthreads

我正在阅读有关pthreads here的信息。在一个例子中,他们提供了this源代码。

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

第二季度:风格绝对不好。通过分配long并传递地址,正确地做到这一点没有太大的性能损失。