Возможно ли прямое наведение-caste указатель на пустоту без проблем? Ниже приведен небольшой фрагмент кода, который я извлек из кода here (пример под Pthread Joining).Тип-литье пустота * до длинного
{
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);
}
Как this manual page говорит, что pthread_join() копирует состояние выхода целевого потока (то есть, значение, которое целевой поток подается в pthread_exit()) в месте, на который указывает * RetVal (* состояние в этом дело). Но в программе, о которой я упоминал, статус не указывает на какое-либо местоположение. Тогда как же программа по-прежнему работает?
И, во-вторых, насколько мне известно, статус не может содержать длинное значение, то как статус typecasting дает нам значение, которое длинное, а не адрес?
дубликата HTTP: // StackOverflow .com/questions/12949383/converting-primitive-data-type-to-void-pointer-type? –
@MartinR: Поскольку [this] (http://man7.org/linux/man-pages/man3/pthread_join.3.html) говорит, что ** pthread_join() копирует статус выхода целевого потока (т. Е. значение, которое целевой поток передан pthread_exit (3)) в место, на которое указывает * retval **.Но в программе, о которой я упоминал, _status_ не указывает на какое-либо место, то как работает эта программа? –
Это работает случайно. Статус переменной не инициализируется, поэтому он будет записывать на все точки состояния. Случайно, это может быть где-то законным. Если это где-то незаконно, вы получите крах. – cup