【发布时间】:2023-02-26 00:09:05
【问题描述】:
所以我想知道如何将 void 指针类型转换为结构类型。
代码-
#include <stdio.h>
struct man
{
int age;
int var;
};
struct woman
{
char c;
int age;
int var;
};
void * ptr;
struct man mlist[2];
struct woman wlist[2];
struct man * mptr=mlist; //mptr points to first element of mlist
struct woman *wptr=wlist;
int function(int gender,int a,int b) ///a,b are for struct
{
if(gender==1)
{
(struct man *)ptr=mptr;
// ptr=(struct man *)ptr;
//ptr=(struct man *)mptr;
}
else
{
(struct woman *)ptr=wptr;
//ptr=(struct woman *)ptr;
}
ptr->age=a; //dont know if man or woman
ptr->var=b;
return (ptr->age+ptr->var);
}
void main(void)
{
printf("\n%d\n",function(1,10,3));
}
我收到错误消息 error: request for member 'age' in something not a structure or union 和 error: request for member 'var' in something not a structure or union 以及警告
warning: dereferencing 'void *' pointer 38 | ptr->var=b;
我尝试了几种类型转换 void 指针 *ptr 的方法,但无济于事。我想以这种方式解决这个问题,因为这是一个更大程序的原型。
如果有一些我可能遗漏的概念,请随时纠正我,我对编程还比较陌生。
我试图以这种方式输入 cast :
ptr=(struct man *)mptr;
(struct man *)ptr=mptr;
ptr=mptr;
ptr=(struct man*)ptr;
但错误仍然存在。
【问题讨论】:
-
通常
function会接受void*并将其解释为struct man *或struct woman *取决于int gender,然后根据它做事。如果这是为了上课,你应该和你的教职员工谈谈。 -
((struct man *)ptr)->年龄
标签: c pointers casting structure