我对我在大学看到的这段代码有疑问.
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是一个nodeList **,因此任何赋值都应该是相同的数据类型.由于((* aux) – > next)是nodeList *,你使用&运算符获取nodeList **.
数据类型
变量具有特定的数据类型.例如,aux是List *但是List是nodeList *的别名,因此aux是nodeList **.
但是表达式也有数据类型作为一个整体.例如,
>表达式((* aux) – > next)是数据类型nodeList *和&((* aux) – > next)是数据类型nodeList **.您使用操作符&获取变量的内存地址,以及使用&的结果数据类型是另一个明星.>表达式* aux的数据类型为nodeList *,因为aux是nodeList **,而star运算符通过指针获取指向元素的值,从而有效地从数据类型中删除了一个星号.