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

5

我清楚 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[] );

8
希望这只是打错了字。 - M.M
1
在这种情况下,与 char ***argv 相同,但我猜从 main 开始,当你传递 &argv 后,argv 指向其他地方。不过,函数签名很奇怪,因为 [] 表示参数应该是一个数组,除了单个元素 argv,我想不到还能给它什么。 - chris
1
FYI:http://www.cdecl.org/ 将其翻译为“声明argv为指向指针的指针数组”。 - Motti
@Motti:当argv作为函数参数时,哪里出了问题。 - Benjamin Lindley
听起来你碰巧遇到了一个三星级程序员 - Daniel Kamil Kozar
3个回答

4
如果main定义是main(int argc, char * argv[]),并且您想通过指针发送argv,那么您需要执行Init( &argc, &argv )。相应的参数可以是char ** argv[]

@Deduplicator,我只是好奇,修改argcargv是否是良好定义的行为? - vsoftco
@i486:当然!我应该先看主函数。就像你说的那样。 - stefano
@去重器:stage是一个机器人模拟环境,其中可能包含多个机器人控制器。Init函数将命令行参数传递给模拟中的所有控制器。 - stefano

2

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

如果该库使用一些程序参数,Init函数可以处理它们,然后在其余程序处理参数之前将这些参数从参数列表中移除。


1

char** argv[] 是一个 char** 数组,也就是指向指针的指针数组,更可能是指向以空字符结尾的字符字符串的指针数组,例如:

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

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

然而,如果 argv 来自于 main() 函数本身,则 char** 是一个打字错误,应该改为 char*
char* argv[]

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接