argc和argv的目的是什么?

what is the purpose of argc and argv?

本文关键字:是什么 argc argv      更新时间:2023-10-16
int main( int argc, char ** argv ){
//code here
 return 0; }   

我知道:

  1. argc is表示包含文件名
  2. 的命令行参数的个数。
  3. char ** argv应该是初始表示为char* argv[]
  4. 的数组的char*

假设我是对的,与char * argv[]相比,相对较新的符号char **argv是什么?它指向什么?

我读了这篇文章C/c++的main函数's参数在哪里?然而,它似乎解释了参数的位置,而不是其他。

C标准中带有参数的main原型为:

int main(int argc, char *argv[]) { ... }
现在,在C语言中,数组类型的函数参数调整为1)为类型指针,即:
void foo(T param[])

等价于

void foo(T *param)

所以对main参数使用char *argv[]char **argv是完全相同的。


1) (C99, 6.7.5.3函数声明符(包括原型))"[…(在确定类型兼容性和复合类型时,使用函数或数组类型声明的每个形参都被视为具有调整后的类型,而使用限定类型声明的每个形参都被视为具有其声明类型的非限定版本。)"

在C/c++中,不能按值将数组传递给函数。可以传递指向数组或其引用的指针。当用作函数形参时,数组类型相当于指针类型,即

void foo(int arr[]);

等价于

void foo(int *arr);

同理,int *argv[]等价于int **argv
但请注意,只有当数组类型用作函数的形参时才成立,否则数组和指针是两种不同的类型。