楼主:
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命令本身是一维形成可以多命令的命令列。
括号是? (*argv)[]还是(*)argv[],还是(*)(*)argv?原PO可能误会了阵列宣告了,argv1本身就像pointer一样但又不是pointer,但使用上跟pointer有87分像
楼主:
balaking (看八卦长知识)
2016-11-06 13:33:00可是书里是说没括号是array, 有括号是pointer耶... 昏倒
是这样没错,但array存取跟pointer存取是一样阵列传递就是你宣告的名称,此时array就是个pointer书翻到阵列的章节多看一下
array只有传递参数的时候才可以当成pointer看吧
作者:
LPH66 (-6.2598534e+18f)
2016-11-06 16:06:00argv 的"二维阵列"型式不是直接一个二维阵列传进来而是一个“字符指标”的阵列, 各元素指向一个字符阵列阵列和指标都可以使用 [] 存取, 但意义不一样
作者:
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玩填空游戏(?