main( int argc ,char*argv[ ] ) {int n,i=0 ; while(argv[ 1 ][

问题描述:

main( int argc ,char*argv[ ] ) {int n,i=0 ; while(argv[ 1 ][ i ='\0' ) {n=fun();i++;}
main( int argc ,char*argv[ ] )
{int n,i=0 ;
while(argv[ 1 ][ i ='\0' )
{n=fun();i++;}
printf(%d\n",n*arge);
}
int fun()
{static int s=0;
s+=1;
return s;
}假设程序经编译连接生成可执行文件exam.exe,若输入exam 123 ,结果为6,为什么?
1个回答 分类:综合 2014-12-07

问题解答:

我来补答
printf(%d\n",n*arge);中的arge是argc吗?
如果是的话,结果应该是6,输入exam 123后,参数argc = 2,argv[1] = "123".
因为字符串“123”长度为3,所以argc * n 等于2 * 3 等于6.若exam后没有参数,则argc = 1,
argv[0] = main;
再问: 参数argc = 2,argv[1] = "123". 这一步是为什么?还有最后S是怎么运算出的?
再答: argc和argv是由系统传递的,argc始终大于或等于1,当exam后无有参数时,argc等于1,有n个参数,argc为n+1,第一个字符串的地址存在argv[1],第二个字符串的地址存在argv[2],依此累推。 s你定义为static静态变量,具有连续性,所以执行一次fun()时,s就累加1,总共执行了3次,所以while循环退出时,s的值为3,n的值也为3 一时大意,之前的回答中argv[0] = main;是错的,应该是argv[0] 指向程序运行的全路径名
 
 
展开全文阅读
剩余:2000
下一页:立体几何 24题