Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的字符**argv[]是什么+;?_C++_Pointers - Fatal编程技术网

C++ C+中的字符**argv[]是什么+;?

C++ C+中的字符**argv[]是什么+;?,c++,pointers,C++,Pointers,我很清楚char*argv[]和char**argv之间的区别(例如,如中所述) 但是char**argv[]是什么类型的呢?指向字符指针的指针?当用于向程序传递参数时,会是什么 对于记录,该类型出现在我试图与Python接口的C++库的以下声明中: /** Initialize the Stage library. Stage will parse the argument array looking for parameters in the conventional way. */

我很清楚char*argv[]和char**argv之间的区别(例如,如中所述)

但是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[] );

如果
main
定义为
main(int-argc,char*argv[])
并且您希望通过指针发送
argv
,您将执行
Init(&argc,&argv)
。相应的参数可以是
char**argv[]

我假设这个Init函数将对main接收到的argc和argv进行更改,因此它需要指向它们的指针


如果库使用一些程序参数,Init函数可以处理这些参数,然后在程序的其余部分处理这些参数之前,从参数列表中删除这些参数。

char**argv[]
是一个由
char**
组成的数组,其中包含指向
char
的指针数组,或者更可能是指向以null结尾的字符串的指针数组,例如:

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

char** argv[2];
argv[0] = &str1;
argv[1] = &str2;
但是,如果
argv
来自
main()
本身,则
char**
是一个打字错误,它必须是
char*

char* argv[]

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

希望在这种上下文FWIW中,它与
char***argv
相同,但我从
main
猜测,
argv
经过
&argv
后指向其他地方。但是函数签名很奇怪,因为
[]
表示参数应该是数组,我无法想象除了一个元素之外还能给它什么:将它转换为将argv声明为指向指针的指针数组char@Motti:当argv是一个函数参数时,这是错误的。听起来像是你偶然发现了一个。@重复数据消除程序只是好奇,修改
argc
argv
是否定义良好的行为?@i486:当然!我应该先看看主楼。正如你所说的。@重复数据消除器:stage是一个机器人模拟环境,可能包括几个机器人控制器。Init函数将命令行参数传递给模拟中的所有控制器。