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

我正进入(状态

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

在线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;
}

您可以使用#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));
}
链接地址: http://www.djcxy.com/p/28385.html

上一篇: Cast from pointer to integer of different size warning

下一篇: malloc : cast to pointer from integer of different size [