从指针转换为不同大小的整数警告

时间:2016-08-20 01:59:10

标签: c

我正在

  

警告:从指针强制转换为不同大小的整数

在第return (Node *) ((unsigned int)(a) ^ (unsigned int)(b));行。我怎么能摆脱它? 对地址进行异或的目的是实现一个XORed链接列表,它是一个双向链接列表,它只包含一个在列表中来回遍历的字段。 npx字段包含指向下一个节点的指针和指向前一个节点的指针之间的差异。指针差异由XORing计算。

  typedef struct  _node {
    int data;
    struct _node *npx;
}Node;

Node * XOR(Node *a, Node *b){
    return (Node *) ((unsigned int)(a) ^ (unsigned int)(b));
}

void addNode(int num, Node **head, int position, int flag)
{
    Node * temp, *q;
    Node *node  = (Node *)malloc(sizeof(Node));
    node ->data = num;
    node->npx = XOR(*head, NULL);
    Node *next = XOR((*head)->npx, NULL);
    (*head)->npx = XOR(node, next);
    *head = node;
    }

int main()
{
    Node *head  = (Node *)malloc(sizeof(Node));
    head->data =23;
    head->npx= NULL;

    addNode(32, &head, 1, 0);
    addNode(33, &head, 1, 0);
    addNode(34, &head, 1, 0);
    addNode(35, &head, 1, 0);
    addNode(36, &head, 1, 0);
    addNode(37, &head, 1, 0);
    addNode(178, &head, 3, 1);
    displayNode(&head);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以使用#include <inttypes.h>和整数类型uintptr_t,它被定义为能够从N1570 7.18.1.4中的void的任何有效指针转换为避免警告。

Node * XOR(Node *a, Node *b){
    return (Node *) ((uintptr_t)(a) ^ (uintptr_t)(b));
}