作者balaking (看八卦长知识)
看板C_and_CPP
标题[问题] 新手第12戒
时间Sun Nov 6 11:29:32 2016
各位先进好
小弟在看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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1478402978.A.C5C.html
1F:→ pttworld: 命令本身是一维形成可以多命令的命令列。11/06 11:54
2F:→ stupid0319: 括弧是? (*argv)[]还是(*)argv[],还是(*)(*)argv?11/06 11:54
第一个, 就是新手13戒的第12点
※ 编辑: balaking (42.73.254.249), 11/06/2016 12:43:59
3F:→ stupid0319: 原PO可能误会了阵列宣告了,argv1本身就像pointer一样 11/06 13:08
4F:→ stupid0319: 但又不是pointer,但使用上跟pointer有87分像 11/06 13:10
5F:→ balaking: 可是书里是说没括弧是array, 有括弧是pointer耶... 昏倒 11/06 13:33
6F:→ stupid0319: 是这样没错,但array存取跟pointer存取是一样 11/06 13:52
7F:→ stupid0319: 阵列传递就是你宣告的名称,此时array就是个pointer 11/06 13:54
8F:→ stupid0319: 书翻到阵列的章节多看一下 11/06 13:56
9F:推 b0920075: array只有传递参数的时候才可以当成pointer看吧 11/06 15:12
10F:推 LPH66: argv 的"二维阵列"型式不是直接一个二维阵列传进来 11/06 16:06
11F:→ LPH66: 而是一个「字元指标」的阵列, 各元素指向一个字元阵列 11/06 16:07
12F:→ LPH66: 阵列和指标都可以使用 [] 存取, 但意义不一样 11/06 16:08
13F:推 EdisonX: 你讲得对啊,传给main的是 array of pointers 没错 , 只是 11/06 16:15
14F:→ EdisonX: pointer 指向的内容是外部给的,app再复制到唯读区,所以若 11/06 16:15
15F:→ EdisonX: 你保证argc>=2时,可以直接 argv[1]="test",指向其他地方 11/06 16:16
16F:→ EdisonX: 这样没错啊 11/06 16:16
17F:→ CoNsTaR: *argv[] 是先往右读再往左读 所以 *(argv[]) 才和没有括 11/06 16:48
18F:→ CoNsTaR: 号的 *argv[] 一样是 array of pointer 11/06 16:48
19F:→ CoNsTaR: (*argv)[] 就变成 pointer to array 了 11/06 16:48
20F:→ balaking: 了解, 谢谢各位 11/06 17:10
21F:→ balaking: 实务上函式参数是不是比较常设计成array of pointers, 11/06 17:21
22F:→ balaking: 而pointer to array比较少用? 感觉後者的使用时机很少@@ 11/06 17:21
23F:→ pttworld: 有星号就有pointer字,array of arrays看不到。 11/06 18:27
24F:→ pttworld: 多个pointer是每个都指向,那是把指向物给理解成什麽。 11/06 18:28
25F:推 longlongint: 建议把记忆体位置列出来 然後用excel玩填空游戏(? 11/07 01:31