作者balaking (看八卦長知識)
看板C_and_CPP
標題[問題] 新手第12戒
時間Sun Nov 6 11:29:32 2016
各位先進好
小弟在看c++ primer中文版的"傳遞一個多維Arrays" (p.241)
書這裡寫的跟第12戒一樣, 接多維陣列必須用指標接, *參數要先括弧起來再接著[]
但為何p.244處理命令列選項*argv[] (亦等於**argv) 沒有先括弧起來?
int main(int argc, char *argv[]){ ... }
陣列不是不能直接傳遞嗎?
呼叫這個main要怎麼傳參數進去呢?
煩請幫小弟解惑, 謝謝各位
=== (12:35增加) ===
小弟自己的理解如下:
char *arg1 = "prog";
char *arg2 = "-d";
char *arg3 = "-o"
char *arg4 = "ofile";
char *arg5 = "data0";
char *argv1[] = {arg1, arg2, arg3, arg4, arg5};
char **argv2 = argv;
所以argv2是pointer to array of pointers
argv1是array of pointers
所以這裡傳遞給main的參數是array of pointers, 不是array of arrays
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.254.249
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1478402978.A.C5C.html
1F:→ pttworld: 命令本身是一維形成可以多命令的命令列。11/06 11:54
2F:→ stupid0319: 括弧是? (*argv)[]還是(*)argv[],還是(*)(*)argv?11/06 11:54
第一個, 就是新手13戒的第12點
※ 編輯: balaking (42.73.254.249), 11/06/2016 12:43:59
3F:→ stupid0319: 原PO可能誤會了陣列宣告了,argv1本身就像pointer一樣 11/06 13:08
4F:→ stupid0319: 但又不是pointer,但使用上跟pointer有87分像 11/06 13:10
5F:→ balaking: 可是書裡是說沒括弧是array, 有括弧是pointer耶... 昏倒 11/06 13:33
6F:→ stupid0319: 是這樣沒錯,但array存取跟pointer存取是一樣 11/06 13:52
7F:→ stupid0319: 陣列傳遞就是你宣告的名稱,此時array就是個pointer 11/06 13:54
8F:→ stupid0319: 書翻到陣列的章節多看一下 11/06 13:56
9F:推 b0920075: array只有傳遞參數的時候才可以當成pointer看吧 11/06 15:12
10F:推 LPH66: argv 的"二維陣列"型式不是直接一個二維陣列傳進來 11/06 16:06
11F:→ LPH66: 而是一個「字元指標」的陣列, 各元素指向一個字元陣列 11/06 16:07
12F:→ LPH66: 陣列和指標都可以使用 [] 存取, 但意義不一樣 11/06 16:08
13F:推 EdisonX: 你講得對啊,傳給main的是 array of pointers 沒錯 , 只是 11/06 16:15
14F:→ EdisonX: pointer 指向的內容是外部給的,app再複製到唯讀區,所以若 11/06 16:15
15F:→ EdisonX: 你保證argc>=2時,可以直接 argv[1]="test",指向其他地方 11/06 16:16
16F:→ EdisonX: 這樣沒錯啊 11/06 16:16
17F:→ CoNsTaR: *argv[] 是先往右讀再往左讀 所以 *(argv[]) 才和沒有括 11/06 16:48
18F:→ CoNsTaR: 號的 *argv[] 一樣是 array of pointer 11/06 16:48
19F:→ CoNsTaR: (*argv)[] 就變成 pointer to array 了 11/06 16:48
20F:→ balaking: 了解, 謝謝各位 11/06 17:10
21F:→ balaking: 實務上函式參數是不是比較常設計成array of pointers, 11/06 17:21
22F:→ balaking: 而pointer to array比較少用? 感覺後者的使用時機很少@@ 11/06 17:21
23F:→ pttworld: 有星號就有pointer字,array of arrays看不到。 11/06 18:27
24F:→ pttworld: 多個pointer是每個都指向,那是把指向物給理解成什麼。 11/06 18:28
25F:推 longlongint: 建議把記憶體位置列出來 然後用excel玩填空遊戲(? 11/07 01:31