Const and Pointer - 限定符const同指针的结合使用
来源:互联网 发布:淘宝活动代报名 编辑:程序博客网 时间:2024/06/16 12:51
一、一维指针
1. 当a为变量时,const指针3种用法
(1)const int *p = &a;(或写作int const *p = &a;)
*p值不能改变,a的值可以改变
(2)int *const p = &a;
p值不能改变, a的值可以改变
(3)const int *const p = &a;
*p值和p值都不能改变,a的值可以改变
2. 当a为常量时,const指针3种用法
(0)const int a = 20; //设a为常量,于是以下各句中,a的值都不能改变
(1)int *p=&a;
错误。左边为int*型,右边为const int*型,两边不匹配
(2)const int *p = &a;(或写作int const *p = &a;)
正确。类型匹配。*p值不能改变
(3)int *const p = &a;
错误。左边为int *const型,右边为const int*型,两边不匹配
(4)const int *const p = &a;
正确,多加了一个const,形成*const,使指针所指地址不得改变。*p值和p值都不能改变
3. 分析方法
一般来说,你可以在头脑里画一条垂直线穿过指针声明中的星号(*)位置:
如果const出现在线的左边,指针指向的数据为常量;
如果const出现在线的右边,指针本身为常量;
如果const在线的两边都出现,二者都是常量。
e.g.:
(1)char *p = "hello";
非const指针, 非const数据
(2)const char *p = "hello";
非const指针, const数据
(3)char * const p = "hello";
const指针, 非const数据
(4)const char * const p = "hello";
const指针,const数据
二、二维指针
(1) const char **p;
p[i]的值可变,而p[i][j]的值不可变。
(2) char * const *p;
p[i]的值不可变,而p[i][j]的值可变。
(3) const char * const *p;
p[i]的值不可变,p[i][j]的值也不可变。
由此可见,第三种对于接收参数的一方而言,是最为严厉的限制。在设计接口时,这类限制有助于减少程序中的潜在问题,但却会使使用现有接口的一些程序出现错误。许多公开的标准,特别是POSIX,往往会出于这种考虑而选择char * const *。在设计程序时,对于这种char * const *,应当作const char * const *看待,而不应abuse其p[i][j]可写的特性。
Reference:
1. http://blog.csdn.net/rhzwan123/archive/2008/03/29/2227643.aspx
2. http://blog.delphij.net/archives/001491.html
- Const and Pointer - 限定符const同指针的结合使用
- const限定符的使用
- const限定符的使用
- C++对指针使用const 限定符
- const pointer(const指针)
- C++ const 限定符 指针的使用方法
- 指针和const限定符
- 指针和const限定符
- 指针和const 限定符
- 指针与const限定符
- 指针和const限定符
- 指针与const限定符
- 指针与const限定符
- 指针与const限定符
- 指针与const限定符
- 指针与const限定符
- const限定符和指针
- 指针和const限定符
- lunx的相关知识点(权限问题)
- String怪事
- 在2410+linux平台上,关于led 的一个简单应用程序
- Dojo学习笔记(3. Dojo的基础对象和方法)
- 一个不错的js验证框架
- Const and Pointer - 限定符const同指针的结合使用
- DELL Vostro200显卡 在Win2003下安装驱动解决方法
- Dojo学习笔记(2. djConfig解说)
- 对象与Xml的相互转化
- Dojo学习笔记(1. 模块与包)
- WinForm中动态绑定TreeView数据
- C语言学习心得
- 网通联通10月15日正式合并
- 房价的真相--转载自"焦点房地产"的一位过客评论