main函数参数表(int argc,char** argv)怎么理解?这个的结果是什么?为什么?
int main(int argc, char** argv)
{
while(**argv++!='a');
printf("%s", *argv);
return 0;
} 展开
推荐于2018-03-12
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,不影响),就可以看出规律了
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”
如果还有疑问欢迎继续追问
输出结果是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)再返回字符