Mus*_*shy 0 c99 void-pointers c++11
好吧,虽然堆栈上的详细信息void*,书籍喜欢The C Programming Language (K&R)和The C++ Programming Language (Stroustrup).我学到了什么?这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;
}
Run Code Online (Sandbox Code Playgroud)
我稍后会处理内存释放.假设我不了解存储的类型void*,我该如何获取值? 这意味着我已经需要知道这种类型了,这并没有揭示出void*我在遵循这里的内容时的一般性质,尽管仍然没有理解.
为什么我期望void*合作和编译器自动抛出堆内或堆栈中某些寄存器内部隐藏的类型?
我稍后会处理内存释放.假设我不了解void*中存储的类型,我该如何获取值?
你不能.你必须知道的有效类型的指针可以,然后才能取消对它的引用被转换为.
以下是使用泛型类型的几个选项:
std::any. boost::any.