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

作者: balaking (看八卦長知識)   2016-11-06 11:29:32
各位先進好
小弟在看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
作者: pttworld (批踢踢世界)   2016-11-06 11:54:00
命令本身是一維形成可以多命令的命令列。
作者: stupid0319 (徵女友)   2016-11-06 11:54:00
括弧是? (*argv)[]還是(*)argv[],還是(*)(*)argv?原PO可能誤會了陣列宣告了,argv1本身就像pointer一樣但又不是pointer,但使用上跟pointer有87分像
作者: balaking (看八卦長知識)   2016-11-06 13:33:00
可是書裡是說沒括弧是array, 有括弧是pointer耶... 昏倒
作者: stupid0319 (徵女友)   2016-11-06 13:52:00
是這樣沒錯,但array存取跟pointer存取是一樣陣列傳遞就是你宣告的名稱,此時array就是個pointer書翻到陣列的章節多看一下
作者: b0920075 (Void)   2016-11-06 15:12:00
array只有傳遞參數的時候才可以當成pointer看吧
作者: LPH66 (-6.2598534e+18f)   2016-11-06 16:06:00
argv 的"二維陣列"型式不是直接一個二維陣列傳進來而是一個「字元指標」的陣列, 各元素指向一個字元陣列陣列和指標都可以使用 [] 存取, 但意義不一樣
作者: EdisonX (卡卡獸)   2016-11-06 16:15:00
你講得對啊,傳給main的是 array of pointers 沒錯 , 只是pointer 指向的內容是外部給的,app再複製到唯讀區,所以若你保證argc>=2時,可以直接 argv[1]="test",指向其他地方這樣沒錯啊
作者: CoNsTaR ((const *))   2016-11-06 16:48:00
*argv[] 是先往右讀再往左讀 所以 *(argv[]) 才和沒有括號的 *argv[] 一樣是 array of pointer(*argv)[] 就變成 pointer to array 了
作者: balaking (看八卦長知識)   2016-11-06 17:10:00
了解, 謝謝各位實務上函式參數是不是比較常設計成array of pointers,而pointer to array比較少用? 感覺後者的使用時機很少@@
作者: pttworld (批踢踢世界)   2016-11-06 18:27:00
有星號就有pointer字,array of arrays看不到。多個pointer是每個都指向,那是把指向物給理解成什麼。
作者: longlongint (華哥爾)   2016-11-07 01:31:00
建議把記憶體位置列出來 然後用excel玩填空遊戲(?

Links booklink

Contact Us: admin [ a t ] ucptt.com