• 关于双指针遍历


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

    #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]!='';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;
    }


    Do one thing at a time,and do well.
  • 相关阅读:
    Debian常用操作
    debian-11.0.0-amd64
    CentOS-8.4.2105-x86_64
    第20章: 二进制方式部署K8S1.20高可用集群
    天狮集团云函数实践:自定义业务逻辑实现跨境电商全球直播
    峰值利用率80%+,视频云离线转码自研上云TKE实践
    腾讯首个CNCF沙箱开源项目
    斗鱼直播云原生实践之注册中心篇
    Superedge的新特性和未来之路
    腾讯云与 Grafana Labs 达成深度合作, 推出全新 Grafana 托管服务
  • 原文地址:https://www.cnblogs.com/huiz/p/9610692.html
Copyright © 2020-2023  润新知