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

标签 c pointers struct

我正在编写一个用 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/

相关文章:

c - 查找指向数组的指针的大小

c - 指向结构 C 指针的指针

python - 如何切换二进制数据的字节顺序

c - 使用 fprintf() 将奇怪的输出到文本文件

c - c中的间接级别

c - 在c中初始化一个新结构

c++ - 如何在 C++ 中新建和初始化结构?

c - 数组索引改变

c++ - 记录编译源码的时间

通过数组进行 C 编程迭代