gpt4 book ai didi

c - 将不同的结构传递给函数(使用 void *)

转载 作者:行者123 更新时间:2023-11-30 17:43:31 25 4
gpt4 key购买 nike

我需要弄清楚如何将两个不同的结构传递给一个函数。我尝试使用 void * 作为参数,但收到错误:

warning: dereferencing 'void *' pointer
error: request for member left in something not a structure or union

成员(member)权限同样错误

这是我一般所做的事情(代码可能无法编译)。

struct A{
char *a;
struct A *left, *right;
} *rootA;

struct B{
char *b;
struct B *left, *right;
} *rootB;

void BinaryTree(void *root, void *s){
if(condition)
root->left=s;
else if(condition)
BinaryTree(root->left, s);

if(condition)
root->right=s;
else if(condition)
BinaryTree(root->right, s);
}

int main(){
// Assume the struct of nodeA and nodeB get malloc()
// as well as the variables a and b with actual data.
struct A nodeA;
struct B nodeB;
BinaryTree(rootA, nodeA);
BinaryTree(rootB, nodeB);

return 0
}

最佳答案

您对结构声明感到困惑。类型由 struct 后面的单词给出。最后那件事需要去掉,至少在你了解 typedef 之前是这样。示例:

struct A{
char *a;
struct A *left, *right;
};

当您调用 BinaryTree 时,您需要始终向其传递指针而不是结构。示例:

BinaryTree(&nodeA, &nodeA);

当您对 void 指针进行操作时,您需要首先将其转换为正确的指针类型。示例:

(struct A*)root->left=s;

将这些结构体作为 void 指针传递绝对是不好的做法,你会让自己感到非常困惑。应谨慎使用空指针。由于您似乎是从 C 开始的,所以我建议您在更好地理解值和引用语义之前不要使用它们。话虽这么说,当我开始使用 C 语言时,我编写了很多愚蠢的代码,有时仍然如此。随着时间的推移和练习,你就会明白这一点。

关于c - 将不同的结构传递给函数(使用 void *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230549/

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