【发布时间】:2018-10-29 10:20:38
【问题描述】:
在 c 的 main 函数中,这样的情况并不少见,
int main(int argc, char **argv){}
我对此有几个问题。这似乎是一个字符串数组,因为我可以访问argv[0] 并获取程序的名称,或者访问argv[1] 并获取一个正在传递给程序的参数。为什么char **argv 是一个字符串数组?我猜它是一个指向名为 argv 的 char 指针的指针。如果它不是一个字符串数组,那我为什么可以这样访问它。
【问题讨论】:
-
char **argv是一个字符串数组。 -
在函数参数列表中,
type *var与type var[]相同,所以char **argv等价于char *argv[],是一个字符串数组。 -
参数存储在一个指针数组中。数组自然衰减为指向其第一个元素的指针。因此,如果您有一个指针数组,它将衰减为指向指针的指针。
-
您可以使用指针的数组索引语法,因为像
argv[i]这样的表达式被语言视为指针算术。对于任何指针或数组p和索引i,表达式p[i]和*(p + i)是相等的。
标签: c arrays pointers arguments main