我很清楚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[] );
答案 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**[]
可能有意义所以它可以指向原始字符串而不必复制它们。