[問題] 傳遞多維陣列問題

看板C_and_CPP作者 (看八卦長知識)時間9年前 (2016/11/06 11:29), 9年前編輯推噓4(4021)
留言25則, 8人參與, 最新討論串1/1
各位先進好 小弟在看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

11/06 11:54, , 1F
命令本身是一維形成可以多命令的命令列。
11/06 11:54, 1F

11/06 11:54, , 2F
括弧是? (*argv)[]還是(*)argv[],還是(*)(*)argv?
11/06 11:54, 2F
第一個, 就是新手13戒的第12點 ※ 編輯: balaking (42.73.254.249), 11/06/2016 12:43:59

11/06 13:08, , 3F
原PO可能誤會了陣列宣告了,argv1本身就像pointer一樣
11/06 13:08, 3F

11/06 13:10, , 4F
但又不是pointer,但使用上跟pointer有87分像
11/06 13:10, 4F

11/06 13:33, , 5F
可是書裡是說沒括弧是array, 有括弧是pointer耶... 昏倒
11/06 13:33, 5F

11/06 13:52, , 6F
是這樣沒錯,但array存取跟pointer存取是一樣
11/06 13:52, 6F

11/06 13:54, , 7F
陣列傳遞就是你宣告的名稱,此時array就是個pointer
11/06 13:54, 7F

11/06 13:56, , 8F
書翻到陣列的章節多看一下
11/06 13:56, 8F

11/06 15:12, , 9F
array只有傳遞參數的時候才可以當成pointer看吧
11/06 15:12, 9F

11/06 16:06, , 10F
argv 的"二維陣列"型式不是直接一個二維陣列傳進來
11/06 16:06, 10F

11/06 16:07, , 11F
而是一個「字元指標」的陣列, 各元素指向一個字元陣列
11/06 16:07, 11F

11/06 16:08, , 12F
陣列和指標都可以使用 [] 存取, 但意義不一樣
11/06 16:08, 12F

11/06 16:15, , 13F
你講得對啊,傳給main的是 array of pointers 沒錯 , 只是
11/06 16:15, 13F

11/06 16:15, , 14F
pointer 指向的內容是外部給的,app再複製到唯讀區,所以若
11/06 16:15, 14F

11/06 16:16, , 15F
你保證argc>=2時,可以直接 argv[1]="test",指向其他地方
11/06 16:16, 15F

11/06 16:16, , 16F
這樣沒錯啊
11/06 16:16, 16F

11/06 16:48, , 17F
*argv[] 是先往右讀再往左讀 所以 *(argv[]) 才和沒有括
11/06 16:48, 17F

11/06 16:48, , 18F
號的 *argv[] 一樣是 array of pointer
11/06 16:48, 18F

11/06 16:48, , 19F
(*argv)[] 就變成 pointer to array 了
11/06 16:48, 19F

11/06 17:10, , 20F
了解, 謝謝各位
11/06 17:10, 20F

11/06 17:21, , 21F
實務上函式參數是不是比較常設計成array of pointers,
11/06 17:21, 21F

11/06 17:21, , 22F
而pointer to array比較少用? 感覺後者的使用時機很少@@
11/06 17:21, 22F

11/06 18:27, , 23F
有星號就有pointer字,array of arrays看不到。
11/06 18:27, 23F

11/06 18:28, , 24F
多個pointer是每個都指向,那是把指向物給理解成什麼。
11/06 18:28, 24F

11/07 01:31, , 25F
建議把記憶體位置列出來 然後用excel玩填空遊戲(?
11/07 01:31, 25F
文章代碼(AID): #1O7gEYnS (C_and_CPP)