返回信息流理解1: 如果从右开始读,这个是代表指针p指向一块固定的地址(这块地址的值可以变,p的值不可以变), 这个地址里的值是指向一个常字符数组的指针, 不知道这么理解对不对
理解2:const char * const p1中, p1是值不变的指向常字符数组的指针, 再在最后加上一个*, 那么p就是p1的地址(即p的值可以变,p1的值不可以变)
两中理解矛盾,请大家指点一下,谢谢~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #8516同步于 2008/6/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请问下const char * const *p是什么意思
fromwithin
2008/6/16镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
就近原则
定义了一个指针,这个指针是个const类型,并且其指向的char*也是个const类型的cha
r*值
也就是说,p值不能变,其指向的地址也要是个const类型的
对这样的类型,只能采用初始化表的形式来赋值
一旦初始化之后,不管是P还是其指向的(数组中的)元素的内容都不可以改变
【 在 fromwithin (drivenfromwithin) 的大作中提到: 】
: 理解1: 如果从右开始读,这个是代表指针p指向一块固定的地址(这块地址的值可以变,p的值不可以变), 这个地址里的值是指向一个常字符数组的指针, 不知道这么理解对不对
: 理解2:const char * const p1中, p1是值不变的指向常字符数组的指针, 再在最后加上一个*, 那么p就是p1的地址(即p的值可以变,p1的值不可以变)
: 两中理解矛盾,请大家指点一下,谢谢~~
: ...................
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的值不可以变)
: 两中理解矛盾,请大家指点一下,谢谢~~
【 在 evengine 的大作中提到: 】
: const char * const *p
: 在C++ Primer里面看到过一种理解这种指针的牛X方法
: 如下:
: ...................
既然是从右往左读, 这里的const *为什么不代表p指向的是一个常量而代表p本身是一个常量?
个人觉得,如果按从右往左读的原则,那么应该理解为:"p是一个指向const char的常量指针的地址"
而不是"p是一个指向const char*的常量指针".
这两种解释很相似但是实际不一样(在于p是否是常量), 很疑惑..
按照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指针 的指针。
欢迎拍砖!
【 在 stillvxxw 的大作中提到: 】
: 按照c专家编程里面的说法,分析一个声明的步骤如下:
: 1.取最左边的标识符;
: 2.查看标志符右边的下一个符号,如果是[],对于每一对表示“......的数组”;
: ...................
这个和我在5楼分析的一样啊, 但是问题是是这样么??
1,2楼和这个分析不一样
const char * const p表示指针p是常指针且指向地址不能改变
那么再加一个*, const char * const *, 应该就是指向p这种类型变量的指针, 那么这个指针的值是可以改变的.
【 在 stillvxxw 的大作中提到: 】
: 按照c专家编程里面的说法,分析一个声明的步骤如下:
: 1.取最左边的标识符;
: 2.查看标志符右边的下一个符号,如果是[],对于每一对表示“......的数组”;
: ...................
re..
(const char *)(const *) p