免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3782 | 回复: 5
打印 上一主题 下一主题

[C] const char *const *const path [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-04 17:53 |只看该作者 |倒序浏览
  1. int MMDB_aget_value(MMDB_entry_s *const start,
  2.                     MMDB_entry_data_s *const entry_data,
  3.                     const char *const *const path)
复制代码
const char *const *const path
这是什么意思?该怎么解读?
代码没有问题,能编译通过...

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
2 [报告]
发表于 2014-12-04 18:11 |只看该作者
path是指针的指针,它是const的,它指向的指针也是const的,它指向的指针指向的char也是const的

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
3 [报告]
发表于 2014-12-04 19:30 |只看该作者
const char * const * const p

我觉得可以这样分析。

1: const p表示p是常量,即不允许p++
2: const * const p 表示 p一个指针,该指针指向常量(所以用const修饰),即不允许(*p)++,即*p指向常量
3: const char * const * const p 表示 *p指向 const int *即(*(*p))是const char 即不允许(**p)++

论坛徽章:
0
4 [报告]
发表于 2014-12-05 10:44 |只看该作者
const char * const * const p

第一步改成规范后缀写法,就是将第一个const放到char的后面,如果char后面有一个则属于冗余,有的编译器不视为错误,如:

    const int const * a;   这里const存在冗余。

    即:  const int const * a;  等价于  const int * a;  等价于 int const * a;   


所以,原语句改为后缀写法是:

char const * const * const p;

然后采用c语言声明的一般规则,从右到左读:

const p           读: 常量p
*const p         读: 常量p是个指针
const*const p 读: 常量p是个指针,指向常量
*const*const p 读: 常量p是个指针,指向常量指针
const *const*const p 读: 常量p是个指针,指向常量指针,指针指向常量
char const *const*const p 读: 常量p是个指针,指向常量指针,指针指向常量字符






论坛徽章:
0
5 [报告]
发表于 2014-12-08 02:13 |只看该作者
path is a read-only pointer to a read-only pointer to the read-only char

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
6 [报告]
发表于 2014-12-08 14:24 |只看该作者
回复 1# fl3w


    可以使用cdecl命令来解释。
    cdecl explain 'const char *const *const path'
   

    declare path as const pointer to const pointer to const char
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP