C指针疑惑

前端之家收集整理的这篇文章主要介绍了C指针疑惑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对我在大学看到的这段代码有疑问.
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);
       }   
   }
}

>我不知道,List * aux =& l;实际上.因为List与nodeList * so相同,所以代码是nodeList * * aux =& l;这实际上是我不明白的,是指向一个指针的指针,该指针包含一个nodeList结构的指针的地址?
>我理解的第二件事是最后一行. aux =&((* aux) – > next);
为什么在左侧没有*的辅助?如果它被声明为List * aux =& l;列表只是指向第一个节点的指针?

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

解决方法

>完全正确.
>您应始终匹配数据类型. aux是一个nodeList **,因此任何赋值都应该是相同的数据类型.由于((* aux) – > next)是nodeList *,你使用&运算符获取nodeList **.

数据类型

变量具有特定的数据类型.例如,aux是List *但是List是nodeList *的别名,因此aux是nodeList **.

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

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

猜你在找的C&C++相关文章