[英]How to cast a void pointers to float to be used in a function in 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.