[英]const char * vs const char ** on argv
我想从命令行参数获取文件名,以便可以将其传递给文件打开功能,但是,即使它被定义为“ const char * argv”,默认情况下,argv []似乎也是const char **类型的主要参数中的[]]。 我的函数需要const char *,有没有办法将这两个转换?
int main(int argc, const char *argv[]) {
memory Memory;
Memory.loadROM(argv); // Error 'argument of type "const char **" is incompatible with parameter of type "const char *"'
}
当在函数参数中使用它而不是引用类型时, const char *argv[]
和const char **argv
完全相同,因为前者将被调整为后者。
根据N4296第8.3.5p5节:
将类型为“ T的数组”或“返回T的函数”的任何参数分别调整为“指向T的指针”或“返回T的函数的指针”
因此const char *argv[]
是“类型为const char *
的数组”,因此被调整为“指向const char *
的指针”。
并且由于argv
的类型为const char **
,因此您想取消引用以获得const char *
:
Memory.loadROM(argv[1])
char* argv[]
和char** argv
之间的区别实际上非常微妙,因此您经常会看到它们可以互换使用。 典型的默认值为char** argv
因为这是更常规的方法,但是替代方法也没有错。
在这两种情况下, argv[0]
都是第一个参数。 请记住,指针的行为类似于数组,而char* argv[]
是char*
的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.