我正在阅读有关 pthreads 的内容here https://computing.llnl.gov/tutorials/pthreads/。在一个例子中,他们给出了this https://computing.llnl.gov/tutorials/pthreads/samples/hello.c源代码。
创建线程时,它们将 long 类型(强制转换为 void * 类型)传递给函数!。
在函数内部,它们接收该值并进行反向转换以获得长整型值。
Q1:是否允许将指针类型转换为原始数据类型,反之亦然(在 C 和 C++ 中)?
Q2。如果是这样,这样做是好事吗?他们不应该创建一个指向这个 long 类型的指针,然后将该指针强制转换为 void * 并将其传递给函数吗?
我发现这种将原始类型转换为指针类型的想法非常令人困惑?
从任何指针类型到 void* 的转换是可以理解的,但是原始数据类型如何存储在 void* 类型中?在特定系统上,基元类型的大小是否有可能大于为指针类型分配的大小?
Q1:是的,但是这是否有效是由实现定义的(= 取决于平台)。一个更安全的版本会使用uintptr_t
代替long
.
Q2:这绝对是糟糕的风格。通过分配一个正确的方法,不会有太大的性能损失long
并传递地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)