gpt4 book ai didi

c - 访问传递给 void* 指针的结构元素

转载 作者:行者123 更新时间:2023-12-02 00:16:08 25 4
gpt4 key购买 nike

我正在使用二叉搜索树数据结构对一系列具有类型定义的结构进行排序:

typedef struct {
char c;
int index;
} data_t;

typedef struct node node_t;

typedef node {
void *data;
node_t *left;
node_t *right;
}

node_t typedef 来自为此目的提供给我的一个库,大概带有一个 void* 指针以确保多态性。 node 将被传递到函数中:

静态无效
*recursive_search_tree(node_t *root,
void *key, int cmp(void*,void*))

在 recursive_search_tree 函数中,我希望能够修改代码以使用索引元素作为条件来找到最接近字符数组线性传递索引的匹配项,这最终将涉及一个 data_t传入 *keykey->index 在函数内访问。

问题

是否可以访问 key->index,其中 key 是指向 data_t 结构的 void*,或者这只是如果 data_t 被声明为键的类型,可能吗?我曾尝试执行后者,但即使将指针强制转换为 int 似乎也无法通过编译器。

最佳答案

当然有可能,您将 key 转换为 *data_t 类型。 (只要那确实是 key 所指向的!)

key                     /* argument of type void* */
(data_t*)key /* cast as type data_t* */
((data_t*)key)->index /* dereferenced */

这是一个简单的例子:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
char c;
int index;
} data_t;

typedef struct node {
void *data;
struct node *left;
struct node *right;
} node_t;

static int cmp(void *lhs, void *rhs)
{
return ((data_t *)lhs)->index - ((data_t *)rhs)->index;
}

int main(void)
{
data_t d0;
data_t d1;

d0.c = 'A';
d0.index = 1;
d1.c = 'B';
d1.index = 2;

printf("d0 < d1? %s\n", (cmp((void *)&d0, (void *)&d1) < 0 ? "yes" : "no"));
printf("d1 < d0? %s\n", (cmp((void *)&d1, (void *)&d0) < 0 ? "yes" : "no"));

return EXIT_SUCCESS;
}

关于c - 访问传递给 void* 指针的结构元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com