Ami*_*mar 4 c c++ pointers pthreads
我正在读这里的 pthreads .在一个例子中,他们给出了这个源代码.
在创建线程时,它们传递一个long类型,类型为void*类型到函数!
在函数内部,它们接收此值并反向转换以获得长值.
Q1:是否允许将指针类型转换为原始数据类型和副verca(在C和C++中)?
Q2.如果是这样,这样做是好事吗?他们不应该创建一个指向这个long类型的指针,然后将此指针类型转换为void*并将其传递给该函数.
这种将原始类型转换为指针类型的想法我发现很混乱?可以理解,从任何指针类型转换为void*,但原始数据类型如何存储在void*类型中?是否有可能在特定系统上,基本类型的大小可能会大于为指针类型分配的大小?
Q1:是的,但它是实现定义的(=平台依赖)这是否有效.一个更安全的版本将使用uintptr_t而不是long.
Q2:风格绝对不好.通过分配long和传递地址,正确地执行此操作不会有太多性能损失.