tinyxml 查找element
2015-10-20 21:02
344 查看
下面这段代码是网上找来的,很是经典
其中用到了递归的思想
下面来谈下关于参数中指针的指针的使用。
其实在网上找的代码原本是
不同的地方已经用红色标出
首先先来说下什么时候使用二级指针
想像这么一个场景,现在有一个查询的函数,查到之后会返回一个结构的指针,此时我们可以定义一个该结构的空指针,然后用这个指针来保存这个结果。
那么现在需求变一下,我像把一个该结构的空指针作为一个参数传过去,该函数的返回值另有其他用途,那么这个时候传参数就有上述的两种方法
第一 传指针的地址,所以形参是二级指针
第二 传指针的引用(不知道术语准不准确),指针也是变量,所以就可以有引用(别名),修改别名的值,那么相应的原值也会发生变化。
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\n", 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\n", pEle->Value()); 64 return true; 65 } 66 } 67 68 return false; 69 }
不同的地方已经用红色标出
首先先来说下什么时候使用二级指针
想像这么一个场景,现在有一个查询的函数,查到之后会返回一个结构的指针,此时我们可以定义一个该结构的空指针,然后用这个指针来保存这个结果。
那么现在需求变一下,我像把一个该结构的空指针作为一个参数传过去,该函数的返回值另有其他用途,那么这个时候传参数就有上述的两种方法
第一 传指针的地址,所以形参是二级指针
第二 传指针的引用(不知道术语准不准确),指针也是变量,所以就可以有引用(别名),修改别名的值,那么相应的原值也会发生变化。
相关文章推荐
- DOM对象
- Android报表解决方案 使用开源组件iChartjs(二)
- Win10与Ubuntu 15.04双系统安装方法
- LintCode-最大数
- 菜鸟之路-04
- Android中layout_align****和setPadding方法整合
- HDU 1428 漫步校园(Spfa+记忆化搜索)
- 日经春秋 20151020
- 反射了解集合泛型的本质
- Android报表解决方案 使用开源组件iChartjs(一)
- POJ 3617 Best Cow Line(字典序最小问题)
- P1004 滑雪
- svn冲突问题详解 SVN版本冲突解决详解
- UITextField
- 寻找轮廓
- 全排列的四种生成算法
- 为什么我们需要数学
- oracle pl/sql之sql中的---if语句
- sprintf函数可能会造成由buf指向的缓冲区的溢出
- 五、线程通信