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);
} 展开
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);
} 展开
展开全部
指针类型强制转换,将struct mib_node* 指针转换成struct mib_list_rootnode*,
这么做是很危险的,转换前后两个类型只有两个相同的成员
(而且main函数 开始,声明的指针未初始化,指向未知内存)
这么做是很危险的,转换前后两个类型只有两个相同的成员
(而且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;
};
将小的转换成大的,他们前面两个成员是一样的,所以转换后只能访问前面两个成员才不会报错,后面的成员是不存在的,访问就会报错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询