在C ++中取消引用void指针
我正在尝试实现通用链表。 节点的结构如下 –
typedef struct node{ void *data; node *next; };
现在,当我尝试为数据分配地址时,假设例如对于int,例如 –
int n1=6; node *temp; temp = (node*)malloc(sizeof(node)); temp->data=&n1;
如何从节点获取n1的值? 如果我说 –
cout<data));
我明白了 –
`void*' is not a pointer-to-object type
当我为其分配int的地址时,无效指针是否被转换为int指针类型?
您必须首先将void*
强制转换为实际有效的指针类型(例如int*
),以告诉编译器您希望取消引用多少内存。
无法取消引用void指针。 您需要将其强制转换为合适的非void指针类型。 在这种情况下, int*
cout << *static_cast(temp->data);
因为这是C ++,所以你应该使用C ++强制转换而不是C样式转换。 你不应该在C ++等中使用malloc
等。
无法取消引用void指针。 您需要将其强制转换为合适的非void指针类型。 问题是关于C ++所以我建议考虑使用模板来实现你的目标:
template struct node { T *data; node *next; };
然后:
int n1=6; node *temp = new node (); temp->data=&n1;
最后:
cout << (*(temp->data));
可以进行类型转换,但这将是一种C风格的类型不安全解决方案,而不是C ++类型。
Typecast temp->数据到int然后打印。
cout<<*((int *)temp->data);