argv上的const char*vs const char**

Aur*_*eal 1 c++

我想从命令行参数获取文件名,所以我可以将它传递给文件打开函数,但是,argv []默认情况下似乎是const char**类型,即使它被定义为"const char*argv" []"在主要论点中.我的函数需要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 *"'
}
Run Code Online (Sandbox Code Playgroud)

iBu*_*Bug 5

当在功能参数没有被引用类型中使用,const char *argv[]并且const char **argv完全相同因为前者将被调整到后者.

根据N4296,第8.3.5p5节:

任何类型为"T of T"或"函数返回T"的参数都被调整为"指向T的指针"或"指向函数返回T的指针",

所以const char *argv[]是"类型数组const char *",因此调整为"指向const char *".

因为argv是类型const char **,你想取消引用它得到一个const char *:

Memory.loadROM(argv[1])
Run Code Online (Sandbox Code Playgroud)