免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 7971 | 回复: 42

[C] c中const的用法疑问 [复制链接]

论坛徽章:
0
发表于 2012-09-15 22:47 |显示全部楼层
代码是这样的:
int a = 4;
int b = 5;
int const *p1 = &a; //加了const表示可以修改p1这个指针,但是不能修改p1所指向的值

那么我的运行结果就有趣了

a = 11;//这个可以运行,不报错
*p1 = 11;//这行不可以运行,报错

根据我的理解,a=11这个应该也要报错的,前面不是说了const在此处表示的是:不能修改p1所指向的值吗?
a=11这个就相当于修改了p1所指向的值了啊? 这样理解有什么不对吗,请大家指点一下

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-09-15 22:52 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2012-09-15 22:57 |显示全部楼层
回复 2# pmerofc

噢 ,这样啊。 谢谢啦


   

论坛徽章:
0
发表于 2012-09-15 22:57 |显示全部楼层
运行出错, 那你是怎么编译的啊啊啊啊

论坛徽章:
0
发表于 2012-09-16 10:52 |显示全部楼层
gtkmm 发表于 2012-09-15 22:57
运行出错, 那你是怎么编译的啊啊啊啊


呵呵,说错了 准确的说是编译出错,我新手,以前没在意过这些术语之间的不同啦

论坛徽章:
0
发表于 2012-09-16 14:23 |显示全部楼层
这样修饰,只是在编译过程中保证的。

论坛徽章:
0
发表于 2012-09-16 20:14 |显示全部楼层
weiweiwang1988 发表于 2012-09-16 14:23
这样修饰,只是在编译过程中保证的。


请详说,为什么?

论坛徽章:
0
发表于 2012-09-16 20:57 |显示全部楼层
本帖最后由 fztcjjl 于 2012-09-16 22:29 编辑

仅仅只是代表*p是常量,a仍然是变量。
关于const的更多用法,可以访问我的C++教程网,www.cppcourse.com,观看相关视频

论坛徽章:
0
发表于 2012-09-16 21:06 |显示全部楼层
类型修饰符是自右向左起作用的,因此自右向左看即可。

对于int const *p,首先,从*号看,则p是一个指针;再看const,则p是一个常量指针,即不能通过指针解引用,改变指向的变量的值(注意这里不是指指向的变量的本身的值不能改变);最后看,则p是一个整型常量指针。

同理const int *p,首先,p是一个指针;再看,则p是一个整型指针;最后看,p是一个常量整型指针,亦即整型常量指针。

相反对于int * const p,首先,p是一个常量,即p本身的值不能变了;再看,则由于*号,p是一个指针常量,指针常量是什么意思,首先要明确指针的值是什么意思,指针的值是指指向某个变量的地址;即赋予指针的这个地址不能变了,即如果p = &a,则不能再进行如p = &b等新的赋值;最后看,p是一个整型指针常量。

这样说可能还是有些绕,但希望有助于记忆吧,因为个人认为谈不上有助于理解。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2012-09-16 22:51 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP