main函数参数表(int argc,char** argv)怎么理解?这个的结果是什么?为什么?

程序T1的代码如下,则运行T1 abc bcd cde aed的输出结果是_______.
int main(int argc, char** argv)
{
while(**argv++!='a');
printf("%s", *argv);
return 0;
}

1、int main(int argc, char** argv)表示当执行程序时可以带上参数,所以题目中执行时就写为T1  abc  bcd  cde  aed,可理解为要执行一个名为T1的程序,并需要对abc  bcd  cde  aed这几个字符串进行处理

2、argc表示参数的个数,此处argc=5,即T1  abc  bcd  cde  aed这5个

3、argv表示的是命令行参数,char** argv可以看成char* argv[],即一个字符串数组,每个元素对应一个字符串,值为字符串的首地址。因此**argv就是字符串的首字母

4、**argv++!='a'就表示当字符串的首字母不等于a时,则跳过该字符串,继续判定下个字符串。一旦发现某个字符串首字母为a,则在argv++作用下输出下一个字符串。比如检测第一个字符串abc时发现首字母为a,则跳出while循环,并在argv++作用下输出bcd

5、**argv++优先级可以看成**(argv++)


以下是一些测试(我的文件名是Cpp1.exe,不影响),就可以看出规律了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-06-16

main函数的参数表示从外部控制器传入的参数,argc为参数个数,argv为字符串数组代表各参数,其中,argv[0]为程序本身名称。

对于程序T1如下 运行T1 abc bcd cde aed

int main(int argc, char** argv)
{
/* argc=5;argv={"T1.exe","abc","bcd","cde","aed"} */
while(**argv++!='a') continue; /*原程序中此处有分号,视为continue*/
printf("%s", *argv);   
return 0;
}

程序的运行结果是 bcd

程序运行时:

读入参数后,argv指向"T1.exe"      

**argv!='a',进入循环,argv自增,指向"abc"

**argv=='a',退出循环,argv自增,指向 "bcd"

打印“bcd”

如果还有疑问欢迎继续追问

第2个回答  2015-07-31
argc 为命令行参数的数量,char **argv为命令行参数的指针
输出结果是T1
**argv返回当前参数的第一个字符,当它不等于字符a时,打印当前参数,argv++将参数指针自增
while(**argv++!='a') 就是判断当前参数的第一个字符是否等于字符a,然后将命令行参数指针argv自增追问

额额,那个T1不是输入的参数,参数应该是abc bcd cde aed

自增的话是移到第一个参数的下一个位置,还是下一个参数的第一个字母位置呢?
还有,麻烦说明一下 **argv++!='a' 这一条语句的运算符优先级好吗?主要是**和++的优先级。运算的时候是把指针*就看做一个符号还是把**argv看做一个整体呢?

追答

刚才看错了,while语句后还有个分号,while语句就是那一行就结束了,printf("%s", *argv);是单独的一行
应该是跳过以字符'a'开始的参数,然后打印以'a'开头的第一个参数
后++的优先级大于*,但是后自增表达式变量自增后,表达式返回的是原来的值,不是自增后的值
*是右结合的**argv即*(*argv) char **argv 表示指向字符串(字符指针)的指针,*argv返回字符串(字符指针) ,*(*argv)再返回字符

本回答被网友采纳
相似回答