HoN*_*uRu 6 c++ struct pointers
我对我在大学看到的这段代码有疑问.
struct nodeList{
int data;
nodeList * next;
};
typedef nodeList * List;
void filter( List &l )
{
List * aux = &l;
while(*aux)
{
if( (*aux)->data > 3 )
{
List toDelete = *aux;
*aux = (*aux)->next;
delete toDelete;
}
else
{
aux = &((*aux)->next);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道,究竟做了List * aux = &l;什么.因为List是nodeList *这样的,代码将是nodeList * * aux = &l;,而实际上我不明白,是指向一个指针的指针,该指针保存指针的地址nodeList struct?
我理解的第二件事是最后一行.aux = &((*aux)->next);
为什么aux没有*左侧?如果它被宣布为List *aux = &l;是List只是一个指向第一个节点?
先感谢您.我google了很多,但我没有找到任何答案.如果你能回答我的问题,我会非常感激.
究竟.
您应始终匹配数据类型.aux是a nodeList **,因此任何赋值都应该是相同的数据类型.由于((*aux)->next)IS nodeList *,可以使用&运营商获得nodeList **.
数据类型
变量具有特定的数据类型.例如,aux是一个List*但是List别名nodeList*,所以aux是nodeList**.
但是表达式也有数据类型作为一个整体.例如,
((*aux)->next)是数据类型nodeList *并且&((*aux)->next)是数据类型nodeList **.使用运算符&获取变量的内存地址,使用的结果数据类型&是另一个星.*aux是数据类型nodeList *,因为aux is nodeList **和star运算符通过指针获取指向元素的值,从而有效地从数据类型中删除一个星.