关于双指针遍历

2024-09-07 08:08
文章标签 遍历 指针

本文主要是介绍关于双指针遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今晚跟一个朋友突然问我,你懂双指针遍历吗?并叫我敲出代码。当时自己愣住了,但是还是写出来了,第一个版本是:

#include <iostream>
using namespace std;

int main(int argc, char** argv, char** arge)
{
cout<<"输出参数个数:"<<argc<<endl;

cout<<"输出字符串数组:"<<endl;
for(int i=0; i<argc; i++)
cout<<argv[i]<<endl;

cout<<"输出环境变量:"<<endl;
for(int j=0; *arge[j]!='\0';j++)
{
cout<<arge[j]<<endl;
}

return 0;
}

可能有些人看到int main(int argc, char** argv, char** arge)感觉奇怪,怎么会有三个参数那?当时我朋友跟我说时我同样是感觉很奇怪,百度下没有百度出来,就上msdn的帮助文档看来下,的确有这样的写法。其中:

int argc:表示你在命令行输入命令时,一共有多少个参数;

char** argv:是表示输入参数的字符串数组;

char** arge:是表示系统环境变量。 

上面的代码虽然可以完成遍历,但是是用二维数组的形式遍历,没有达到我朋友说的要求,而且效率低下。我朋友说作为一个优秀的C/C++软件工程师,应该用高效率的指针遍历,想了想,经过改动,就有了第二个版本,代码如下:

#include <iostream>
using namespace std;


int main(int argc, char** argv, char** arge)

cout<<"输出参数个数:"<<argc<<endl;

cout<<"输出字符串数组:"<<endl;
while(*argv)
{
cout<<*argv<<endl;
argv++;
}


cout<<"输出环境变量:"<<endl;
//对于双指针遍历,有必要解释下,arge++加的是四个指针。举个简单的例子:
//Int* a; int ** b; a++是加的一个指针,b++加的是四个指针(当然,这是相对的,不是绝对的)。
while(*arge)
{
cout<<*arge<<endl;
arge++;
}

return 0;
}


以上的版本二就是二维指针的遍历,但仅仅代表个人见解,如有什么不对的地方,还望各位多多指点。



//昨晚的理解似乎有点问题,现在重新说下自己的理解。

#include <iostream>
using namespace std;


int main(int argc, char** argv, char** arge)

cout<<"输出参数个数:"<<argc<<endl;

cout<<"输出字符串数组:"<<endl;
while(*argv) //*argv也是个指针,个人感觉是个一级指针,即一级指针(char*这个字符串)不为空
{
cout<<*argv<<endl;//输出char*
argv++; //加的是二级指针
}


cout<<"输出环境变量:"<<endl;
//对于双指针遍历,有必要解释下,arge++加的是二级指针。举个简单的例子:
//Int* a; int ** b; a++是加的一个一级指针,b++加的是一个二级指针。
while(*arge)
{
cout<<*arge<<endl;
arge++;
}

return 0;
}


这篇关于关于双指针遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144527

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Java遍历HashMap的6种常见方式

《Java遍历HashMap的6种常见方式》这篇文章主要给大家介绍了关于Java遍历HashMap的6种常见方式,方法包括使用keySet()、entrySet()、forEach()、迭代器以及分别... 目录1,使用 keySet() 遍历键,再通过键获取值2,使用 entrySet() 遍历键值对3,

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr