好吧,虽然关于void*
,The C Programming Language (K&R)
和The C++ Programming Language (Stroustrup)
这样的书籍的详细资料Stack很混乱。我学到了什么? void*
是一个没有推断类型的泛型指针。它需要转换为任何已定义的类型,并且打印void*
只是产生地址。另一个void *话题;我只是不得不问,因为我很困惑
我还知道什么? void*
不能被解除引用,并且迄今为止仍然是C/C++
中的一个项目,我从中发现了很多关于这方面的知识,但很少有人对此有所了解。
据我所知,它必须被投射,如*(char*)void*
,但对于generic
指针我没有任何意义,我必须知道我需要什么类型才能获取值。我是一名Java程序员;我理解泛型,但这是我努力的方向。
所以我写了一些代码
typedef struct node
{
void* data;
node* link;
}Node;
typedef struct list
{
Node* head;
}List;
Node* add_new(void* data, Node* link);
void show(Node* head);
Node* add_new(void* data, Node* link)
{
Node* newNode = new Node();
newNode->data = data;
newNode->link = link;
return newNode;
}
void show(Node* head)
{
while (head != nullptr)
{
std::cout << head->data;
head = head->link;
}
}
int main()
{
List list;
list.head = nullptr;
list.head = add_new("My Name", list.head);
list.head = add_new("Your Name", list.head);
list.head = add_new("Our Name", list.head);
show(list.head);
fgetc(stdin);
return 0;
}
后,我会处理的内存释放。假设我不知道存储在void*
中的类型,我该如何获得该值? This意味着我已经需要知道类型,并且this没有透露关于void*
的一般性质,而我遵循什么是here虽然仍然没有理解。
为什么我期待void*
合作,编译器会自动抛出隐藏在堆或堆栈的某个寄存器中的类型?
我认为'void *'的使用是:Window的CWnd类可以容纳'void * data'。它不知道这些数据是什么,也不关心。它对这个'data'没有做任何事情,它只是对我有用。同时,我的代码可以将'thingamabob'存储到这个'data'中。我的代码假设'data'始终保存'thingamabob',这很好,因为我的代码是访问这个'data'成员的唯一代码。我的代码“知道”这个类型,但是“CWnd”没有。 –