我有以下代码:
typedef Module * Ptr;
producer(Ptr net)
Ptr Node;
Node = net;
pthread_mutex_lock(&mutex);
produce(q,(uint64_t)Node);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
这里产生的是一个库: 产生(队列q,uint64_t值)
然后我有了消费者的代码:
consumer()
Ptr Node;
pthread_mutex_lock(&mutex);
while(!canConsume(q))
{
pthread_cond_wait(&cond,&mutex);
}
Node = (Ptr)consume(q);
pthread_mutex_unlock(&mutex);
但是,当我尝试在两个函数中打印输出modNode的值时。虽然生产者函数中的Node似乎是地址,但消费者函数中的节点看起来是0.我想我在某种程度上搞砸了指针和整数之间的转换,因为这个代码在传递整数时工作正常。我的问题是如何将指针转换为uint64_t?
答案 0 :(得分:0)
要将指针转换为uint64_t
,请使用强制转换运算符:
(uint64_t)ptr
使用printf
打印指针时,您希望使用%p
格式说明符:
printf("%p\n", (void*)ptr);
不要忘记将ptr
转换为void*
,除非ptr
是void*
或char*
或其中的合格变体。