的整數我正在轉換爲大小不同的警告
警告:投從指針不同大小
的整數在行return (Node *) ((unsigned int)(a)^(unsigned int)(b));
。我怎樣才能擺脫它? XORing地址的目的是實現一個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;
}
你爲什麼異或指針? – dbush
您可以通過不將指針轉換爲整數來擺脫警告。 –
實際上,你可以通過XORing(相對)指針來做有趣的事情,比如將雙向鏈表的向前和向後指針壓縮到同一個字段。但是,這不過是一個彙編,而不是C域,現在可能已經過時了。 – tofro