我理解,因为argc
是参数的数量,它可以是一个int。但是为什么argv
是char pointer
型的呢?这是否意味着我不能传递一个整数参数并在数学运算中使用argv[1]
?
Edit:为了更清楚,是否可以写int* argv[]
。argv
是否已经定义为char*
类型,因此不能更改?
实际上main
有两种有效的定义:
int main() { /* ... */ }
和
int main(int argc, char *argv[]) { /* ... */ }
或同等学历。(注意,作为形参,char *argv[]
相当于char **argv
,后者更准确地表示了它的含义,即指向指向char
的指针的指针。)
实现可以(但不要求)支持其他表单;例如,一些系统支持额外的char *envp[]
参数。
main
的不寻常之处在于它没有一个有效的定义。它不像其他用户定义的函数,它没有无穷多个函数。例如,您可以随意定义一个名为foo
的函数。main
的定义是受限的,因为它是程序的入口点,调用环境必须知道如何调用它。
这在ISO c++标准的3.6.1节中有更详细的介绍。N4296是2014年版的草案。
如果要将整数作为命令行参数传递,请将其作为字符串传递,然后解析它们。(atoi()
函数是最简单的方法之一,但它不做任何错误检查。在c++ 11开头的<string>
头文件中定义的std::stoi()
函数更好。)
main
函数接受一个字符串列表(严格地说,一个指向char*
指针数组初始元素的char**
指针,每个指针都指向字符串的开头),因为它是一个非常灵活的数据结构,但它并不过于复杂。(注意这里的"string"是一个C风格的字符串,一个以' '
null字符结束的字符序列——不要与c++标准库定义的std::string
类型混淆。)
有各种用于解析命令行参数的开源库。例如,类unix系统有一个getopt()
函数;详细信息请参见其文档。