看到书上的例子有一句话很不理解,下面是我挑重要的代码用来说明
#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
;上面的解释完全根据你给出的部分代码, 仅供参考, 如有纰漏请指出.