C语言结构体中void型指针问题,求高手解答!! 5

typedefstructuniversalSet{void*elem;intcard;inttype;}uset;...voidaddElem(void*elem,us... typedef struct universalSet {
void *elem;
int card;
int type;
} uset;
...
void addElem(void *elem, uset *set)
{
if(set->type==CHAR)
{
set->elem[set->card]=elem; // 这行报错!为什么??
}
set->card++;
}
展开
 我来答
大地打回头
2014-07-12
知道答主
回答量:19
采纳率:0%
帮助的人:8.6万
展开全部
分析结合性 ->和【】优先级一样,就从左往右看,(我不知道set是不你你后来定义变量),set->elem 是elem变量的内容,elem并不是数组,是空指针,此时计算机不知到空型+1究竟要移动多少位;eg int a, b; // b = &a + 1;//(如果a地址是2000)那么我们可以知道b=2004;应为int 站4个字节。此时计算机是知道&a的地址是一个整形的(a是正型);回到上面由于假设(void) * a地址也是200 不知道a+1到底=2000+?,void不像int已知有4个字节,viod说对应的是未知的。
追问
哦哦 有道理 我是悲催学生党...只能用void*指针 不过可以有办法通过参数(set->type)知道具体是 *int 或是 *char 之类的  (set是头文件写的一个结构体)  然后能不能在知道具体是哪种指针的情况下,怎么转换,然后实现要的功能呀(就是来一个 void* elem(可以判断是哪种)就加到 uset* set后面)
追答
通过强制类型转换eg void a;//int  b; b = ( int )a;
模仿上面的格式
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式