4

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

在创建线程时,他们将一个 long 类型,类型转换为 void * 类型传递给函数!。

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

Q1:是否允许将指针类型转换为原始数据类型,反之亦然(在 C 和 C++ 中)?

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

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

4

1 回答 1

5

Q1:是的,但是这是否可行是由实现定义的(=取决于平台)。一个更安全的版本将使用uintptr_t而不是long.

Q2:这绝对是糟糕的风格。long通过分配 a并传递地址来正确执行此操作并没有太大的性能损失。

于 2012-10-18T07:37:53.350 回答