C语言结构体指针问题

部分代码如下(主要不太明白最后一句“ipa_rn=(structmib_list_rootnode*)(ipa_n->nptr)”的作用):structmib_node{... 部分代码如下(主要不太明白最后一句“ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr)”的作用):
struct mib_node
{
u8_t node_type;
/* array or max list length */
u16_t maxlength;
};

struct mib_list_node
{
struct mib_list_node *prev;
struct mib_list_node *next;
s32_t objid;
struct mib_node *nptr;
};

struct mib_list_rootnode
{
u8_t node_type;
u16_t maxlength;

/* additional struct members */
struct mib_list_node *head;
struct mib_list_node *tail;

/* counts list nodes in list */
u16_t count;
};

int main(void)
{
struct mib_list_rootnode *ipa_rn;
struct mib_list_node *ipa_n;

ipa_rn = (struct mib_list_rootnode*)(ipa_n->nptr);
}
展开
 我来答
289723462
2016-05-15 · 超过13用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:19.4万
展开全部
指针类型强制转换,将struct mib_node* 指针转换成struct mib_list_rootnode*,
这么做是很危险的,转换前后两个类型只有两个相同的成员
(而且main函数 开始,声明的指针未初始化,指向未知内存)
追问
只是复制了部分代码,*ipa_rn和*ipa_n在程序里面有赋值。这样强制转换后的结果是什么?和普通的数据类型转换一样吗?
追答
你可以理解为将结构体
struct mib_node
{
u8_t node_type;
u16_t maxlength;
};
转换成该结构体
struct mib_list_rootnode
{
u8_t node_type;
u16_t maxlength;

struct mib_list_node *head;
struct mib_list_node *tail;

u16_t count;
};

将小的转换成大的,他们前面两个成员是一样的,所以转换后只能访问前面两个成员才不会报错,后面的成员是不存在的,访问就会报错
戚薇QWQ
2016-05-15 · TA获得超过1987个赞
知道大有可为答主
回答量:3917
采纳率:2%
帮助的人:944万
展开全部
强制类型转换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式