c与cpp中的argc和argv
代码
cpp
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
/* argc代表参数个数 */
cout << "argc = " << argc <<endl;
for(int i = 0; i < argc; i++)
{
cout << argv[i] << endl;
}
return 0;
}
argc 和 argv 是 C/C++ 语言中 main 函数的两个标准参数, 用于在程序启动时接收命令行参数.
argc (argument Count): 参数的个数, 表示命令行输入参数的总数, 包括程序名本身, 值至少为 1(因为程序名总是算一个参数);
argv (Argument Vector): 参数的内容(字符串数组), 程序本身的名称(执行文件名)也算第一个参数.
cmd
C:\Users\bushuo\Desktop\cplusplus>g++ para_cpp.cpp -o para_cpp.exe
C:\Users\bushuo\Desktop\cplusplus>para_cpp.exe A B C D
argc = 5
para_cpp.exe
A
B
C
D
基本形式
cpp
int main(int argc, char *argv[]) {
// ...
}
cpp
int main(int argc, char **argv) {
// ...
}
这两种写法是等价的, 因为数组作为函数参数传递时会退化(decay)为指针.
char **argv 就是指向 char* 的指针, 本质上表示一个字符串数组.
char * → 一个字符串(字符指针)
char ** → 指向字符指针的指针, 也就是指向一个字符串数组的指针.
cpp
char *argv[] // 数组写法
char **argv // 指针写法
这两种在函数参数里是完全等价的, 编译器处理成同一个东西.
例题
cpp
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
/* argc代表参数个数 */
int n = 9, i;
for (i = 1; i < argc; i++)
n = n * 10 + *argv[i] - '0';
printf("%d\n", n);
return 0;
}
假设编译后, 运行上述程序的可执行文件, 输入命令a.exe 123 456 789 100, 则执行结果为
cmd
C:\Users\bushuo\Desktop\cplusplus>a.exe 123 456 789 10
91471