繁体   English   中英

堆栈中使用的C中的空指针

[英]Void pointers in C used in stacks

我正在编写一个在c中实现堆栈的程序。 如果我将节点结构声明为,我希望每个节点都接受任何类型的数据(即int char struct等)。

    typedef struct node{
           void *data;
           struct node *next;
   }Node;

那是否允许我的void指针数据指向任何类型的内存?

是的,但是有一些注意事项涉及取消引用空指针以访问内部数据。

基本上,假设您有一个节点:

Node *node;

并且您具有一些Point结构:

typedef struct Point {
    int x;
    int y;
} Point;

然后在一个节点上放置一个点:

Point *p = malloc(sizeof(Point));
p->x = 0;
p->y = 3;
node->data = p;

为了访问该点的成员,您必须使用类型转换:

printf("%d\n", ((Point *)node->data)->x);

或者,您可以分配正确类型的指针并复制void指针:

Point *p = node->data;
printf("%d\n", p->x);

因为这行不通:

printf("%d\n", node->data->x);

这是因为void指针不包含任何类型信息,供编译器理解void指针所指向的内容。

这就是您几乎需要了解的有关如何使用空指针的所有信息。

那是否允许我的void指针数据指向任何类型的内存?

是。

简而言之,是的。 这意味着您将存储一个指向int等的指针,这样会占用空间。 如果列表中没有同类,则还需要确保知道如何处理不同的类型。

是的,它可能是您想要实现的,但是您需要注意取消对void指针的引用。我暗示的是,您必须在取消引用时将种姓void指针键入适当的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM