关键字 const
来源:互联网 发布:ipad怎么看淘宝直播 编辑:程序博客网 时间:2024/06/15 02:59
一个比较经典的问题——问以下两种声明的区别:
1) const char * p
2) char * const p
这里的 const 关键字是用于修饰常量,书上说 const 将修饰离它最近的对象,所以,以上两种声明的意思分别应该是:
1) p 是一个指向常量字符的指针,不变的是 char 的值,即该字符的值在定义时初始化后就不能再改变。
2) p 是一个指向字符的常量指针,不变的是 p 的值,即该指针不能再指向别的。
现在倒是正确说出了两者的意思,但应该怎样记忆它们呢?
至少我觉得我经常会忘记,以后再遇到了可能又会混淆不清。-_- !
无意间,在网上看到有人介绍了一种不错的记忆方法,分享如下:
Bjarne 在他的《The C++ Programming Language》里面给出过一个助记的方法——“以 * 分界,把一个声明从右向左读”。
注意语法,* 读作 pointer to (指向...的指针),const (常量) 是形容词,char (变量类型) 和 p (变量名) 当然都是名词。
1) const char * p 读作:p is a pointer to a const char,译:p 是一个指针(变量),它指向一个常量字符(const char)。
2) char * const p 读作:p is a const pointer to a char,译:p 是一个常量指针(const p),它指向一个字符(变量)。
从两处蓝色标记也能看出前面提到的“const 修饰离开最近的对象”的说法。
另外请再注意下面的情况。
先看 const int a 和 int const a,这里没有分界符 *,虽然 const 的位置不同,但意思不变,它 const 修饰的是 int,常量整数。
再看 const char * p 和 char const * p,首先以 * 分界,虽然 const 的位置改变了,但它都是在修饰 char,常量字符。
二、使用分类说明:
1、const修饰指针:
1> const int *p; // p的指向可变,但p指向的内容不可变
2> int const *p; // 同1>
3> int *const p; // p的指向不能变,但p指向的内容可变
4> int const * const p; // p的指向(第二个const作用)和指向的内容(第一个const作用)都不能变
5> const int * const p; // 同4>
6> const int * const p1,p2; // 指针p1的指向和指向的内容都不能变。p2是个int值(不是指针),且值不可变。可以看做const int (*const p1),p2;
7> const int a; //a的值不可变,即a是个常量
8> int const a; //同7>
2、const修饰函数的形参:
void fun(const int var){}
这是针对函数编写者来说的,防止函数中对本不应修改的变量var的值作修改。
3、const限定函数返回值:
const int fun();
如果fun()返回值在接下来的程序中需要,且不能改变,可以这样用。
- const关键字
- const关键字
- const关键字
- 关键字const
- const关键字
- const关键字
- const关键字
- const 关键字
- 关键字 const
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- 关键字 const
- const关键字
- android中AIDL简介
- APACHE 禁止指定IP或IP段访问网站
- 关于FFMPEG的libavcodec/avcodec.h' file not found的问题
- 广州网站建设、微信商城开发==广州商淘信息科技有限公司
- Xcode Build Search Paths设置
- 关键字 const
- linux 常用命令五:scp
- 十年•杭研技术秀 | iOS APP的加固保护原理
- Java String.split()处理分隔符
- H5智能内核-基于MVC架构的全新Zoomla!逐浪CMS2 x3.8发布
- android 7.0 + 相机拍照 FileUriExposedException
- DOS查看端口号,并关闭占用端口的进程
- 46 leetcode - 如何快速判断一个数是不是2的幂、3的幂、4的幂
- Struts2 本地化/国际化实现