该题是牛客网上的题目:
https://www.nowcoder.com/test/question/done?tid=32282221&qid=56842#summary
以下程序 经编译连接生成可执行文件 tt.exe ,若运行以下命令行 tt 12 345 678, 则程序的输出结果是()
int main(int argc,char** argv){
int n = 0,i;
for(int i =1;i<argc;i++)
n = n*10 + *argv[i] - '0';
printf("%d\n",n);
return 0;
}
题目解析为 RobinYM 提供的
该题考察的是main函数,C编译器允许main()函数没有参数,或者有两个参数(有些实现允许更多的参数,但这只是对标准的扩展)。这两个参数,一个是int类型,一个是字符串类型。第一个参数是命令行中的字符串数。第二个参数是一个指向字符串的指针数组。
命令行中的每个字符串被存储到内存中,并且分配一个指针指向它。按照惯例,这个指针数组被称为argv(argument value)。系统使用空格把各个字符串格开。一般情况下,把程序本身的名字赋值给argv[0],接着,把参数第一个字符串赋给argv[1]
12 345 678是以字符串的形式输入的,argv[i]代表第i个字符串 ,*argv[i]表示取第i个参数的首字符
argv[i]
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char a[4][4] = {"ab","bc","cd","de"};
for(int i=0;i<4;i++){
cout<<a[i]<<endl;
}
return 0;
}
运行结果:
ab
bc
cd
de
*argv[i]
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char a[4][4] = {"ab","bc","cd","de"};
for(int i=0;i<4;i++){
cout<<*a[i]<<endl;
}
return 0;
}
运行结果:
a
b
c
d
*argv[0] ------> c(程序名)
*argv[1] ------> 1
*argv[2] ------> 3
*argv[3] ------> 6
第一次循环:n=0*10+'1'-'0'= 1
第二次循环:n=1*10+'3'-'0'=13;
第三次循环:n=13*10+'6'-'0'=136