如何将指针转换为整数,反之亦然?

时间:2015-12-06 23:23:52

标签: c pointers

我有以下代码:

    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?

1 个答案:

答案 0 :(得分:0)

要将指针转换为uint64_t,请使用强制转换运算符:

(uint64_t)ptr

使用printf打印指针时,您希望使用%p格式说明符:

printf("%p\n", (void*)ptr);

不要忘记将ptr转换为void*,除非ptrvoid*char*或其中的合格变体。