• tinyxml 查找element


    下面这段代码是网上找来的,很是经典

    43 bool GetNodePointerByName(TiXmlElement* pRootEle, const char* strNodeName,TiXmlElement** destNode)
     44 {
     45     // if equal root node then return
     46     if (0 == strcmp(strNodeName, pRootEle->Value()))
     47     {
     48         *destNode = pRootEle;
     49         return true;
     50     }
     51 
     52     TiXmlElement* pEle = pRootEle;
     53     for (pEle = pRootEle->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement())
     54     {
     55         // recursive find sub node return node pointer  
     56         if (0 != strcmp(pEle->Value(), strNodeName))
     57         {
     58             GetNodePointerByName(pEle,strNodeName,destNode);
     59         }
     60         else
     61         {
     62             *destNode = pEle;
     63             printf("destination node name: %s
    ", pEle->Value());
     64             return true;
     65         }
     66     }
     67 
     68     return false;
     69 }

    其中用到了递归的思想

    下面来谈下关于参数中指针的指针的使用。

    其实在网上找的代码原本是

    43 bool GetNodePointerByName(TiXmlElement* pRootEle, const char* strNodeName,TiXmlElement* &destNode)
     44 {
     45     // if equal root node then return
     46     if (0 == strcmp(strNodeName, pRootEle->Value()))
     47     {
     48         destNode = pRootEle;
     49         return true;
     50     }
     51 
     52     TiXmlElement* pEle = pRootEle;
     53     for (pEle = pRootEle->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement())
     54     {
     55         // recursive find sub node return node pointer  
     56         if (0 != strcmp(pEle->Value(), strNodeName))
     57         {
     58             GetNodePointerByName(pEle,strNodeName,destNode);
     59         }
     60         else
     61         {
     62             destNode = pEle;
     63             printf("destination node name: %s
    ", pEle->Value());
     64             return true;
     65         }
     66     }
     67 
     68     return false;
     69 }

    不同的地方已经用红色标出

    首先先来说下什么时候使用二级指针

    想像这么一个场景,现在有一个查询的函数,查到之后会返回一个结构的指针,此时我们可以定义一个该结构的空指针,然后用这个指针来保存这个结果。

    那么现在需求变一下,我像把一个该结构的空指针作为一个参数传过去,该函数的返回值另有其他用途,那么这个时候传参数就有上述的两种方法

    第一 传指针的地址,所以形参是二级指针

    第二 传指针的引用(不知道术语准不准确),指针也是变量,所以就可以有引用(别名),修改别名的值,那么相应的原值也会发生变化。

  • 相关阅读:
    arcgis建立拓扑分析(检验矢量图)
    矢量图面层和线层相交得到相交后的线层文件(gis相交)
    关于处理注册表权限无法修改的问题(无法打开主键或注册表项unknown)
    my.cnf配置文件
    keepalived联动mysql
    安装客户端连接软件(zabbix_agentd-filebeat-flume)
    zabbix短信配置说明
    zabbix监控工具添加网络设备Ping
    新买了硬盘,让Linux系统识别硬盘nfs---->改成xfs
    vnc软件使用
  • 原文地址:https://www.cnblogs.com/cdwodm/p/4896095.html
Copyright © 2020-2023  润新知