zoukankan      html  css  js  c++  java
  • 关于双指针遍历

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

    #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.
  • 相关阅读:
    转 linux下vi命令大全
    转 html5 canvas 详细使用教程
    怎么让手机网站自适应设备屏幕宽度? 转自百度经验
    转 :<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明
    转自haorooms :网页防止黑客跨框架攻击,及浏览器安全性想到的
    元信息标记<meta>
    Java语言的主要特性
    学习面向对象的三条主线之一 java类及类的成员
    1.5 MySQL信息源
    1.4在MySQL 8.0中添加,不建议使用或删除的服务器和状态变量及选项
  • 原文地址:https://www.cnblogs.com/huiz/p/9610692.html
Copyright © 2011-2022 走看看