問題を起こすことなく、voidへのvoid型ポインタをlong型に直接カスケードすることは可能ですか?以下は、コードhere(例:Pthread Joiningのページのセクション)から抜粋した少しのコードスニペットです。 this manual pageとして型キャストvoid * to long
{
void *status;
long t;
rc = pthread_create(&thread[t], &attr, BusyWork, (void *)t);
rc = pthread_join(thread[t], &status);
printf("Main: completed join with thread %ld having a status of %ld\n",t,(long)status);
}
はpthread_joinを()はコピー対象スレッドの終了ステータス(すなわち、ターゲットスレッドがpthread_exit()に供給された値)の場所には、この中に* RETVAL(*状況によって指さと言います場合)。しかし、私が問題に言及したプログラムでは、地位はどこにも指さない。それでは、プログラムはまだどのように機能していますか?
第2に、私の知る限り、状態が長い値を保持することはできません。次に、型キャスト状態は、どのように長く、アドレスではない値を与えますか?
重複:
Busywork()
関数内でバック実際の値を取得する:// stackoverflowのを次に '問題' は
注意消える:
を使用して提案します.com/questions/12949383/conversion-primitive-data-type-to-void-pointer-type? –
@MartinR:[this](http://man7.org/linux/man-pages/man3/pthread_join.3.html)によると、** pthread_join()はターゲットスレッドの終了ステータスをコピーします(つまり、 targetスレッドがpthread_exit(3)に供給した値)を* retval **が指し示す位置にコピーします。しかし、私が問題に言及したプログラムでは、_status_はどこにも指していないのですが、そのプログラムはどのように動作しますか? –
これは偶然に動作します。変数ステータスは初期化されていないので、いつものステータスポイントに書き込みます。偶然、それはどこか合法的かもしれません。それがどこか違法であれば、クラッシュするでしょう。 – cup