argc和argv的目的是什么?

时间:2014-06-13 12:18:01

标签: c++ c

int main( int argc, char ** argv ){
//code here
 return 0; }   

我知道:

  1. argc表示命令行参数的数量,包括文件名
  2. char ** argv应该是数组的char*,最初表示为char* argv[]
  3. 假设我是对的,与char **argv相比,相对较新的符号char * argv[]是什么?它指的是什么?

    我读过这篇文章 Where are C/C++ main function's parameters?然而它似乎解释了论证的位置,而不是别的。

2 个答案:

答案 0 :(得分:8)

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

int main(int argc, char *argv[]) { ... }

现在在C中,类型数组的函数参数是调整 1)到类型指针,即:

void foo(T param[])

相当于

void foo(T *param)

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

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

答案 1 :(得分:3)

在C / C ++中,您无法通过值将数组传递给函数。可以传递指向数组或其引用的指针。当用作函数参数时,数组类型等同于指针类型,即

void foo(int arr[]);

相当于

void foo(int *arr);

同样int *argv[]相当于int **argv 但请注意,只有当数组类型用作函数的参数时才会出现这种情况,否则数组和指针是两种不同的类型。