C++ C+中的字符**argv[]是什么+;?
我很清楚char*argv[]和char**argv之间的区别(例如,如中所述) 但是char**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. */
对于记录,该类型出现在我试图与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函数将命令行参数传递给模拟中的所有控制器。