整数値をメモリの観点からvoid*
またはviceversaに変換することは何を意味しますか? 私の理解はvoid*
は不特定の長さの記憶のブロックへのアドレスです。
これは、リンゴとオレンジを比較するような感じです。intをvoid *またはその逆に変換することは何を意味しますか?
int myval = 5;
void* ptr = (void*)myval;
printf("%d",(int)ptr);
私は、これが使用されている正確な文脈を与えておくべきであることを認識しました。
int main(int argc, char* argv[]) {
long thread; /* Use long in case of a 64-bit system */
pthread_t* thread_handles;
/* Get number of threads from command line */
if (argc != 2) Usage(argv[0]);
thread_count = strtol(argv[1], NULL, 10);
if (thread_count <= 0 || thread_count > MAX_THREADS) Usage(argv[0]);
thread_handles = malloc (thread_count*sizeof(pthread_t));
for (thread = 0; thread < thread_count; thread++)
pthread_create(&thread_handles[thread], NULL, Hello, (void*) thread);
printf("Hello from the main thread\n");
for (thread = 0; thread < thread_count; thread++)
pthread_join(thread_handles[thread], NULL);
free(thread_handles);
return 0;
} /* main */
/*-------------------------------------------------------------------*/
void *Hello(void* rank) {
long my_rank = (long) rank; /* Use long in case of 64-bit system */
printf("Hello from thread %ld of %d\n", my_rank, thread_count);
return NULL;
} /* Hello */
このコードは、パラレルプログラミングに関するPeter Pachechoの本からのものです。
可能な複製:http://stackoverflow.com/questions/3568069/is-it-safe-to-cast-an-int-to-void-pointer-and-back-to-int-again –
少なくともリンゴをジャガイモと比較するのと同じように。 – alk