繁体   English   中英

argv上的const char * vs const char **

[英]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])

argv包含char * 数组 ,因此,如果只需要一个数组 ,请简化指定所需的数组

Memory.loadROM(argv[1]);

在此处阅读有关argv

char* argv[]char** argv之间的区别实际上非常微妙,因此您经常会看到它们可以互换使用。 典型的默认值为char** argv因为这是更常规的方法,但是替代方法也没有错。

在这两种情况下, argv[0]都是第一个参数。 请记住,指针的行为类似于数组,而char* argv[]char*的数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM