int main(int argc,char ** argv)
可能重复:
什么是正确的主要声明?
这个main
函数中的参数意味着什么? 他们想告诉我们什么?
int main(int argc, char** argv)
更新:而且,前面的代码行类似于这个int main(int argc, char* argv[])
? 如果是这样,我们怎么能说char** argv
类似于char* argv[]
因为它们与数组的角度看起来不相似?
它与int main()
没有任何参数相比如何?
谢谢。
argc
参数是在调用可执行文件时指定的命令行选项的数量,包括可执行文件的名称。 单个命令行选项位于argv
数组中,该数组是NULL
终止的(用于调用可执行文件的名称和路径位于argv[0]
)。
这两个版本之间的区别仅仅在于你想解析命令行参数 - 如果你对它们不感兴趣,那么你可以使用第二种形式忽略它们。
维基百科提供了很好的解释。 第一个参数给出了命令行参数的数量,第二个参数给出了实际的参数。
它们代表命令行参数。
argc是命令行参数的数量,包括可执行文件的名称。 argv是一个以null结尾的字符串数组,其中argv[0]
是命令行参数, argv[i]
是此后的第i个参数, argv[argc-1]
是最后一个参数, argv[argc]
实际上是定义良好的空指针。
从而:
foo bar baz
在命令行上会有argc
= 3, argv[0]
=“foo” argv[1]
=“bar” argv[2]
=“baz” argv[3]
= NULL
请注意,没有为“标志”参数放置特殊附件。
grep -i foo bar.cpp bar.h
会有4个参数(argc = 5,包括grep本身),-i就是其中之一,即使下一个参数是附加到该标志的“值”,这也是适用的。
请注意,如果你做了通配符
grep -i foo *
至少在UNIX中,*会在调用grep之前展开,因此每个匹配的文件都是参数。
顺便
char** argv
和char* argv[]
做同样的事。
此外,虽然标准说你必须使用这些签名之一(你甚至不应该添加任何常量),但你不得不使用这两个变量名称的法则,但它是如此的传统,现在它们非常普遍。 (即你可以使用argCount
和argValues
)。