【发布时间】:2021-02-05 16:07:54
【问题描述】:
我从在线课程中了解到,char **argv 和char *argv[ ] 都可以用作main 的参数。
我也知道它们实际上是相同的,它们都将 argv 声明为“指向 char 指针 (char *) 的指针 (*)”。
是什么使char argv[ ][ ] 作为main 的参数无效?
edit:实际上,char *argv[ ] 是在声明一个数组而不是一个指针吗?所以 argv 只衰减到一个指针而不是一个指针本身?
【问题讨论】:
-
因为
char argv[][]不是一个有效的声明,无论你在哪里拥有它?而且系统正在传递一个jagged array,它只能在 C 中表示为指向指针的指针。 -
是的,我同意,我在任何地方都没有看到
char argv[][],但你能告诉我这是为什么吗? -
函数参数不能声明数组。
-
它们是一样的。
-
@Someprogrammerdude:
char (*argv)[]是合法且可行的;允许使用指向未知大小数组的指针。 C 中没有规定指针必须指向完整类型。相比之下,char argv[][]名义上声明了一个未知大小的数组数组,这违反了数组元素类型不得为不完整类型的约束(C 2018 6.7.6.2 1)。即使数组将被调整为指针,但约束可能在调整之前应用(可能有一些宽容度解释 C 标准对此的解释)。
标签: arrays c pointers arguments