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++;
} 展开
void *elem;
int card;
int type;
} uset;
...
void addElem(void *elem, uset *set)
{
if(set->type==CHAR)
{
set->elem[set->card]=elem; // 这行报错!为什么??
}
set->card++;
} 展开
展开全部
分析结合性 ->和【】优先级一样,就从左往右看,(我不知道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;
模仿上面的格式
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询