看板 C_and_CPP 關於我們 聯絡資訊
各位先進好 小弟在看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://www.ptt.cc/bbs/C_and_CPP/M.1478402978.A.C5C.html
pttworld: 命令本身是一維形成可以多命令的命令列。11/06 11:54
stupid0319: 括弧是? (*argv)[]還是(*)argv[],還是(*)(*)argv?11/06 11:54
第一個, 就是新手13戒的第12點 ※ 編輯: balaking (42.73.254.249), 11/06/2016 12:43:59
stupid0319: 原PO可能誤會了陣列宣告了,argv1本身就像pointer一樣 11/06 13:08
stupid0319: 但又不是pointer,但使用上跟pointer有87分像 11/06 13:10
balaking: 可是書裡是說沒括弧是array, 有括弧是pointer耶... 昏倒 11/06 13:33
stupid0319: 是這樣沒錯,但array存取跟pointer存取是一樣 11/06 13:52
stupid0319: 陣列傳遞就是你宣告的名稱,此時array就是個pointer 11/06 13:54
stupid0319: 書翻到陣列的章節多看一下 11/06 13:56
b0920075: array只有傳遞參數的時候才可以當成pointer看吧 11/06 15:12
LPH66: argv 的"二維陣列"型式不是直接一個二維陣列傳進來 11/06 16:06
LPH66: 而是一個「字元指標」的陣列, 各元素指向一個字元陣列 11/06 16:07
LPH66: 陣列和指標都可以使用 [] 存取, 但意義不一樣 11/06 16:08
EdisonX: 你講得對啊,傳給main的是 array of pointers 沒錯 , 只是 11/06 16:15
EdisonX: pointer 指向的內容是外部給的,app再複製到唯讀區,所以若 11/06 16:15
EdisonX: 你保證argc>=2時,可以直接 argv[1]="test",指向其他地方 11/06 16:16
EdisonX: 這樣沒錯啊 11/06 16:16
CoNsTaR: *argv[] 是先往右讀再往左讀 所以 *(argv[]) 才和沒有括 11/06 16:48
CoNsTaR: 號的 *argv[] 一樣是 array of pointer 11/06 16:48
CoNsTaR: (*argv)[] 就變成 pointer to array 了 11/06 16:48
balaking: 了解, 謝謝各位 11/06 17:10
balaking: 實務上函式參數是不是比較常設計成array of pointers, 11/06 17:21
balaking: 而pointer to array比較少用? 感覺後者的使用時機很少@@ 11/06 17:21
pttworld: 有星號就有pointer字,array of arrays看不到。 11/06 18:27
pttworld: 多個pointer是每個都指向,那是把指向物給理解成什麼。 11/06 18:28
longlongint: 建議把記憶體位置列出來 然後用excel玩填空遊戲(? 11/07 01:31