看到书上的例子有一句话很不理解,下面是我挑重要的代码用来说明
#include <stdio.h>
int main()
{
typedef struct ListElmt_{
void *data;
struct ListElmt_ *next;
}ListElmt;
typedef struct List_{
ListElmt *head;
ListElmt *tail;
int size;
}List;
typedef List Set;
typedef struct KSet_{
void *key;
Set set;
}KSet;
int b=3;
ListElmt a={
&b,
0
};
/*...*/ ((KSet *)(&a)->data)->set;
}
((KSet *)(&a)->data)->set;这句话是把&b传给KSet中的key了吗?set的值是否还未定义?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
就你给出的代码做出解释:
((KSet *)(&a)->data)->set;
&a: 很明显, 获取a的地址;
(&a)->data: 获取a.data的值, 即&b;
((KSet *)(&a)->data): 强转a.data/&b的指针类型, 即将a.data/&b指向的数据当做KSet结构解析;
((KSet *)(&a)->data)->set: 按照KSet结构解析获取struct中的set值;
综: 上述的语句其实相当于((KSet *)(&b))->set;
上面的解释完全根据你给出的部分代码, 仅供参考, 如有纰漏请指出.