我想从命令行参数中获取文件名,因此我可以将其传递给文件打开函数,但是,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 *"'
}
答案 0 :(得分:5)
在函数参数中使用而不是参考类型时,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])
答案 1 :(得分:2)
答案 2 :(得分:-1)
char* argv[]
和char** argv
之间的差异实际上非常微妙,因此您经常会看到它们可以互换使用。典型的默认值是char** argv
,因为这更常规,但替代方案并不错。
在这两种情况下argv[0]
都是第一个参数。请记住,指针的作用类似于数组,char* argv[]
是char*
的数组。