我想创建一个链接列表/树类型的结构,节点之间的链接void*
。
struct node1{
void* left;
void* right;
}
struct node2{
void* next;
int data;
}
int main(){
struct node1* node1=malloc(sizeof(struct node1));
struct node2* node2=malloc(sizeof(struct node2));
node2->data=5;
node1->left=*(struct node2*)node2);
node1=node1->left
}
我想使用node1
及其链接访问node2
的数据,但上面的代码不起作用。怎么了?
这个:
node1->left=*(struct node2*)node2);
包含语法错误和不需要的强制转换。它还取消引用了node2
的值,这使得它出错。
这:
node1=node1->left;
也是错的。不能将不同类型的指针分配给node1
。当然,node1->left
是void*
所以这实际上是一个有效的赋值本身,但它会导致node2
被解释为类型struct node1*
,这是错误的。
如果我正确理解了您要执行的操作,正确的代码将是:
int main(void) {
struct node1* node1 = malloc(sizeof(struct node1));
struct node2* node2 = malloc(sizeof(struct node2));
node2->data = 5;
node1->left= node2;
// Access node2->data from node1:
((struct node2*)node1->left)->data;
return 0;
}