开发者社区 问答 正文

不匹配的强制转换怎么搞?

看到书上的例子有一句话很不理解,下面是我挑重要的代码用来说明

#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的值是否还未定义?

展开
收起
a123456678 2016-06-06 18:21:09 1976 分享 版权
1 条回答
写回答
取消 提交回答
  • 就你给出的代码做出解释:
    ((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;

    上面的解释完全根据你给出的部分代码, 仅供参考, 如有纰漏请指出.

    2019-07-17 19:29:13
    赞同 展开评论
问答地址: