使用argv[argc+1]而不仅仅是argv[]的原因是什么

使用argv[argc+1]而不仅仅是argv[]的原因是什么,c,C,在Jens Gustedt的《现代C》一书中,一些示例代码片段声明了以下主要函数: int main ( int argc , char * argv [ argc +1]) {... 这是我第一次看到一本书或教程这样做。 使用 argv[] 和使用 argv[argc + 1] ? 我的理解是,数组argv将自动创建得足够大,以容纳所有指向程序参数的指针,因此我看不出这本书代码的目的。argc存储用户传递的命令行参数的数量,包括程序的名称。 argv是列出所有参数的字符指针数组。它包含

在Jens Gustedt的《现代C》一书中,一些示例代码片段声明了以下主要函数:

int main ( int argc , char * argv [ argc +1]) {...
这是我第一次看到一本书或教程这样做。 使用

argv[] 
和使用

argv[argc + 1]
?


我的理解是,数组argv将自动创建得足够大,以容纳所有指向程序参数的指针,因此我看不出这本书代码的目的。

argc存储用户传递的命令行参数的数量,包括程序的名称。
argv是列出所有参数的字符指针数组。它包含指向字符串的指针。此处argv[]和argv[argc+1]除了在argv[argc+1]中显式显示大小之外没有任何区别。作者使用第一个指针的原因是作为代码的自文档形式。它告诉程序员函数有一个先决条件;argv指针应该指向该长度数组的第一个元素。argv是以空指针终止的。

目的是使代码自文档化,这样您就可以看到并知道有多少元素是可访问的,自动创建的,这些元素的大小足以容纳所有指向程序参数的指针,最后一个指针为空。应该注意的是,具有显式数组维度的表单,虽然对教育目的有用,但它不是常规的。此外,由于给定的维度不是常量表达式,因此声明依赖于C实现来支持可变长度数组功能,该功能在C99中引入,但在C11中变为可选。@chux,谢谢。我忘了,这是学究式的愚蠢。虽然从某种意义上说,这种结构是一种自我记录的形式,但它是一种琐碎的、不必要的形式。每个人都知道argv是什么——在任何现实世界的程序中,都会有无数的事情需要记录,而不仅仅是这些。