BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #8516同步于 2008/6/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请问下const char * const *p是什么意思

fromwithin
2008/6/16镜像同步20 回复
理解1: 如果从右开始读,这个是代表指针p指向一块固定的地址(这块地址的值可以变,p的值不可以变), 这个地址里的值是指向一个常字符数组的指针, 不知道这么理解对不对 理解2:const char * const p1中, p1是值不变的指向常字符数组的指针, 再在最后加上一个*, 那么p就是p1的地址(即p的值可以变,p1的值不可以变) 两中理解矛盾,请大家指点一下,谢谢~~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
CodeSweetie机器人#1 · 2008/6/16
就近原则 定义了一个指针,这个指针是个const类型,并且其指向的char*也是个const类型的cha r*值 也就是说,p值不能变,其指向的地址也要是个const类型的 对这样的类型,只能采用初始化表的形式来赋值 一旦初始化之后,不管是P还是其指向的(数组中的)元素的内容都不可以改变 【 在 fromwithin (drivenfromwithin) 的大作中提到: 】 : 理解1: 如果从右开始读,这个是代表指针p指向一块固定的地址(这块地址的值可以变,p的值不可以变), 这个地址里的值是指向一个常字符数组的指针, 不知道这么理解对不对 : 理解2:const char * const p1中, p1是值不变的指向常字符数组的指针, 再在最后加上一个*, 那么p就是p1的地址(即p的值可以变,p1的值不可以变) : 两中理解矛盾,请大家指点一下,谢谢~~ : ...................
evengine机器人#2 · 2008/6/17
const char * const *p 在C++ Primer里面看到过一种理解这种指针的牛X方法 如下: *p :说明是指针 const *p:p指向的东西是常量,本身可变 const char * const *p :说明p是指向const char*的指针 至于const char *就不用说了吧 以上,欢迎拍砖 【 在 fromwithin 的大作中提到: 】 : 理解1: 如果从右开始读,这个是代表指针p指向一块固定的地址(这块地址的值可以变,p的值不可以变), 这个地址里的值是指向一个常字符数组的指针, 不知道这么理解对不对 : 理解2:const char * const p1中, p1是值不变的指向常字符数组的指针, 再在最后加上一个*, 那么p就是p1的地址(即p的值可以变,p1的值不可以变) : 两中理解矛盾,请大家指点一下,谢谢~~
at123456机器人#3 · 2008/6/17
fromwithin机器人#4 · 2008/6/17
【 在 evengine 的大作中提到: 】 : const char * const *p : 在C++ Primer里面看到过一种理解这种指针的牛X方法 : 如下: : ................... 既然是从右往左读, 这里的const *为什么不代表p指向的是一个常量而代表p本身是一个常量? 个人觉得,如果按从右往左读的原则,那么应该理解为:"p是一个指向const char的常量指针的地址" 而不是"p是一个指向const char*的常量指针". 这两种解释很相似但是实际不一样(在于p是否是常量), 很疑惑..
stillvxxw机器人#5 · 2008/6/17
按照c专家编程里面的说法,分析一个声明的步骤如下: 1.取最左边的标识符; 2.查看标志符右边的下一个符号,如果是[],对于每一对表示“......的数组”; 3.如果是一个左括号"(",到右括号")"为止的内容表示“返回的函数”; 4查看标志符左边的符号,如果是一个左括号"(", 这个左括号把已经处理的声明组合在一起,直到遇见对应的右括 号,然后从第2步开始; 5如果左边的符号是"const","volatile"或"*", 继续往左边读符号,直到所读的符号不再是这三者之一,如果符号是"const",表示只读,如果是"*"表示“指向....的指针”,然后重复第四步; 6.剩下的符号形成声明的基本类型。 对照步骤,分析如下: 剩余的声明 采用的步骤及及结果 const char * const *p 第1步 找到p const char * const * 第2、3步不匹配 转到第4步 const char * const * 第4步不匹配 转到第5步 const char * const * 第5步,匹配,p是指向...的指针 const char * const 第5步,表示只读的 const char * 第5步, 表示指向的指针 const char 第6步, 表示 “const char” 所以结果是:声明了一个指针p,p指向另一个指针,p所指向的指针是一个const类型的指针(指针本身不能改写),且指向const char(指针指向的内容不能改写)。 所以 p是指向一个 指向const char 的const指针 的指针。 欢迎拍砖!
fromwithin机器人#6 · 2008/6/17
【 在 stillvxxw 的大作中提到: 】 : 按照c专家编程里面的说法,分析一个声明的步骤如下: : 1.取最左边的标识符; : 2.查看标志符右边的下一个符号,如果是[],对于每一对表示“......的数组”; : ................... 这个和我在5楼分析的一样啊, 但是问题是是这样么?? 1,2楼和这个分析不一样
fromwithin机器人#7 · 2008/6/17
const char * const p表示指针p是常指针且指向地址不能改变 那么再加一个*, const char * const *, 应该就是指向p这种类型变量的指针, 那么这个指针的值是可以改变的.
gregory机器人#8 · 2008/6/17
【 在 stillvxxw 的大作中提到: 】 : 按照c专家编程里面的说法,分析一个声明的步骤如下: : 1.取最左边的标识符; : 2.查看标志符右边的下一个符号,如果是[],对于每一对表示“......的数组”; : ................... re.. (const char *)(const *) p
rebirthatsix机器人#9 · 2008/6/17
mb,又搓了一把,是 (const char *)(const *) p; p可以改变