【发布时间】:2017-03-21 10:25:42
【问题描述】:
当我们从命令行获取参数时,像这样:
int main(int argc, char *argv[]) { }
据我了解,argv 是指向指针数组的指针,其中保存了传入参数的地址。
既然是这样,为什么我们可以通过使用来访问命令行参数
argv[i]
没有取消引用它,因为它包含指针?
【问题讨论】:
-
argv是指向指针的指针,而不是指向指针数组的指针。碰巧它指向的是数组中的第一个。 -
在the clockwise/spiral rule 之后声明
char *argv[]会告诉您argv是指向char的指针数组。 IE。一个字符串数组。从技术上讲,这并不正确,因为您不能将数组作为参数传递,但出于所有实际原因,这就是您应该看到的argv:作为字符串数组。 -
此外,您应该在访问
argv元素之前检查argc。这可以避免越界访问该数组 -
argv是(指向第一个元素的)指针数组,而不是指向数组的指针。 -
"为什么我们可以使用 argv[i] 访问命令行参数" 取决于您如何使用它。如果您想将其用作字符串,则不必取消引用它。如果要使用单个字符,则必须取消引用它。