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