什么是C ++中的char ** argv []?

时间:2015-03-10 20:21:48

标签: c++ pointers

我很清楚char * argv []和char ** argv之间的区别(例如,在 this question中所解释的)。

但是char ** argv []是什么类型的?指向字符指针的指针?当用于将参数传递给程序时会是什么?

对于记录,该类型出现在我试图与Python接口的C ++库的以下声明中:

/** Initialize the Stage library. Stage will parse the argument
  array looking for parameters in the conventional way. */
  void Init( int* argc, char** argv[] );

3 个答案:

答案 0 :(得分:4)

如果main定义为main(int argc, char * argv[])且您想通过指针发送argv,则会Init( &argc, &argv )。相应的参数可以是char ** argv[]

答案 1 :(得分:2)

我假设这个Init函数会对main收到的argc和argv进行更改,所以它需要指向它们。

如果库使用了一些程序参数,那么Init函数可以处理它们,然后在参数列表被其他程序处理之前从参数列表中删除它们。

答案 2 :(得分:1)

char** argv[]char**的数组,IOW是指向char指针的指针数组,或者更可能是指向以空字符结尾的字符串的指针数组,例如:< / p>

char *str1 = "...";
char *str2 = "....";

char** argv[2];
argv[0] = &str1;
argv[1] = &str2;

但是,如果argv来自main()本身,则char**是拼写错误,而必须是char*

char* argv[]

但是,如果argv来自某个库,那么它很可能将原始的argv数组从main()包装在自己的数组中,在这种情况下char**[]可能有意义所以它可以指向原始字符串而不必复制它们。