【发布时间】:2016-02-16 14:43:12
【问题描述】:
在浏览一些关于 void 指针的链接时,我在设置和从 void 指针获取值时看到了两种类型,
int main() {
int i = 5;
//This is first way.
void *vPtr = (void *) i;
//printing value of *vPtr,
printf("Getting value in first way, %d\n", (int)vPtr);
//This is second way.
*vPtr = &i;
//printing in second way,
printf("Getting value in second way, %d\n", *((int*)vPtr));
}
它们都将给出相同的值。虽然我对第二种方法的工作原理有所了解,但我并不完全确定第一种方法的工作原理。处理这两者之间的 void 指针时,理想的方法是什么?
对于第一种方法,这是我所指的代码 sn-p。虽然他传递的是 long 类型,但我也可以对 int 做同样的事情。
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0;t<NUM_THREADS;t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
/* Last thing that main() should do */
pthread_exit(NULL);
}
【问题讨论】:
-
不要将指针转换为
int!要打印指针值,请使用正确的格式说明符%p。请阅读有关指针操作、类型转换等的信息。您正在做一些非常奇怪(和错误)的事情。 -
嗨@Olaf,我已经添加了代码sn-p,其中第一个方法用于设置和获取void指针的值。
标签: c pointers void-pointers