簡體   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