C++指针存在疑问

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;什么.因为ListnodeList *这样的,代码将是nodeList * * aux = &l;,而实际上我不明白,是指向一个指针的指针,该指针保存指针的地址nodeList struct

  • 我理解的第二件事是最后一行.aux = &((*aux)->next); 为什么aux没有*左侧?如果它被宣布为List *aux = &l;List只是一个指向第一个节点?

先感谢您.我google了很多,但我没有找到任何答案.如果你能回答我的问题,我会非常感激.

vz0*_*vz0 5

  1. 究竟.

  2. 您应始终匹配数据类型.aux是a nodeList **,因此任何赋值都应该是相同的数据类型.由于((*aux)->next)IS nodeList *,可以使用&运营商获得nodeList **.

数据类型

变量具有特定的数据类型.例如,aux是一个List*但是List别名nodeList*,所以auxnodeList**.

但是表达式也有数据类型作为一个整体.例如,

  • 表达式((*aux)->next)是数据类型nodeList *并且&((*aux)->next)是数据类型nodeList **.使用运算符&获取变量的内存地址,使用的结果数据类型&是另一个星.
  • 表达式*aux是数据类型nodeList *,因为aux is nodeList **和star运算符通过指针获取指向元素的值,从而有效地从数据类型中删除一个星.