加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C指针疑惑

发布时间:2020-12-16 03:35:26 所属栏目:百科 来源:网络整理
导读:我对我在大学看到的这段代码有疑问. 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; }
我对我在大学看到的这段代码有疑问.
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运算符通过指针获取指向元素的值,从而有效地从数据类型中删除了一个星号.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读