[问题] 传递多维阵列问题

楼主: 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