我正在编写一个用 c 语言实现堆栈的程序。如果我将我的节点结构声明为
,我希望每个节点都采用任何类型的数据(即 int char 结构等) typedef struct node{
void *data;
struct node *next;
}Node;
这是否允许我的 void 指针数据指向任何类型的内存?
最佳答案
是的,但是有一些警告涉及取消引用您的 void 指针以访问内部数据。
基本上,假设您有一个节点:
Node *node;
你有一些点结构:
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 指针,这几乎就是您需要了解的全部内容。
关于c - 堆栈中使用的 C 中的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7342696/