关于双指针遍历
今晚跟一个朋友突然问我,你懂双指针遍历吗?并叫我敲出代码。当时自己愣住了,但是还是写出来了,第一个版本是:
#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;
}