const int i; int const p; int *const p;
来源:互联网 发布:eg ti5 知乎 编辑:程序博客网 时间:2024/06/09 01:57
1)先从const int i说起。
使用const修饰的i我们称之为符号常量。即,i不能在其他地方被重新赋值了。注意:const int i与int const i是等价的,相同的,即const与int的位置无所谓。
2)const int *p
看例子:
int i1=30;
int i2=40;
const int *p=&i1;
p=&i2; //此处,p可以在任何时候重新赋值一个新的内存地址。
i2=80; //这里能用*p=80来代替吗?答案是不能
printf("%d",*p); //输出80
分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。
首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;
其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。
3)int * const p
int i1=30;
int i2=40;
int * const p=&i1;
//p=&i2; 错误的。p不能再指向另一个新地址了。
i1=80; //这里能用*p=80来代替,即可以通过*p修改i1的值。
printf("%d",*p);
分析:
此时p的值不能被赋值修改了,只能永远指向初始化时候的内存地址。相反,可用*p修改i1的值了。
所以:综上所述,
指针p因为有了const的修饰,所以为指针常量,即,指针p不能修改了。
整个*p前面没有const修饰,则*p为变量而不是常量,所以,可改变*p的值。
如果const修饰在*p前则不能改的是*p,而不是指p;
如果const是直接写在p前,则p不能改。
4)补充
const int i1=40;
int *p;
p=&i1; //提示错误,无法从const int转为int。
----------------------------------------
const int i1=40;
const int *p;
p=&i1; //两个类型相同,可以这样赋值。
使用const修饰的i我们称之为符号常量。即,i不能在其他地方被重新赋值了。注意:const int i与int const i是等价的,相同的,即const与int的位置无所谓。
2)const int *p
看例子:
int i1=30;
int i2=40;
const int *p=&i1;
p=&i2; //此处,p可以在任何时候重新赋值一个新的内存地址。
i2=80; //这里能用*p=80来代替吗?答案是不能
printf("%d",*p); //输出80
分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。
首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;
其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。
3)int * const p
int i1=30;
int i2=40;
int * const p=&i1;
//p=&i2; 错误的。p不能再指向另一个新地址了。
i1=80; //这里能用*p=80来代替,即可以通过*p修改i1的值。
printf("%d",*p);
分析:
此时p的值不能被赋值修改了,只能永远指向初始化时候的内存地址。相反,可用*p修改i1的值了。
所以:综上所述,
指针p因为有了const的修饰,所以为指针常量,即,指针p不能修改了。
整个*p前面没有const修饰,则*p为变量而不是常量,所以,可改变*p的值。
如果const修饰在*p前则不能改的是*p,而不是指p;
如果const是直接写在p前,则p不能改。
4)补充
const int i1=40;
int *p;
p=&i1; //提示错误,无法从const int转为int。
----------------------------------------
const int i1=40;
const int *p;
p=&i1; //两个类型相同,可以这样赋值。
0 0
- const int i; int const p; int *const p;
- const int *p,const * int p,int const *p
- const int * p,int const * p,int * const p
- 详解const int *p,int*const p,int const *p
- 详解const int *p,int*const p,int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *p、int * const p、int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *p,const * int p,int const *p
- const int *P 、int const *p 、int *const P 详解
- const int* p和int* const p
- const int *p,int *const p区别
- 梦想是未来最好的保障
- artDialog提示框、对话框
- HBase表预分区
- 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer
- Android拍照、摄像方向旋转的问题 代码详解
- const int i; int const p; int *const p;
- 高并发量网站解决方案
- java annotation+反射的应用记录
- MySQL用户管理和权限设置
- 【玩转cocos2d-x之八】精灵类CCSprite
- Atmel AT91SAM9G20 EMAC控制DM9161调试笔记
- 判断一个节点是不是另一个的节点的子节点;
- 【玩转cocos2d-x之九】动作类CCAction
- 栈 hdu1237 简单计算器