2013-12-22 87 views
2

以下不編譯:C++ int main(int argc,char * argv []) - 是一個c風格的數組?

int main (int argc, char *argv[]) { 
    char arr[2][2]; 
    char **ptr = arr; 
    return 0; 
} 

然而,以下的作用:

int main (int argc, char *argv[]) { 
    char **ptr = argv; 
    return 0; 
} 

因此,我會得出這樣的結論的argv不是交流式陣列,其被存儲爲存儲器的單個塊而是某種指針數組。有人可以證實嗎?

謝謝,並關心。

+0

如果'argv'是一個數組數組,那麼內部數組的大小將是類型的一部分(並且它們都必須是相同的大小)。 –

+0

'arr'衰變爲類型爲char(*)[2]'的數組的指針,這與指向類型爲char **的指針的指針不同。 – aschepler

回答

5

這是正確的,argv是一個指向指針數組的第一個元素的指針,每個指針依次(除了最後一個)是一個指向字符串中第一個字符的指針,給出了相應的命令行論據。

函數參數不能是數組。

+0

我刪除了我關於沒有數組類型參數這樣的事情的答案,因爲即使這是一件事情,它仍然可以工作,因爲數組到指針的轉換。主要的問題是內部類型是一個數組,而不是指針。 –

相關問題