const的位置以及区别(C++)
2013-11-30 00:49
232 查看
草泥马,生命这么短就是这班语法创立猪给毒害的。
/article/10899197.html
一个比较经典的问题——问以下两种声明的区别:
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,常量字符。
不知道现在大家是不是对 const 声明的记忆更深了?
/article/10899197.html
一个比较经典的问题——问以下两种声明的区别:
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,常量字符。
不知道现在大家是不是对 const 声明的记忆更深了?
相关文章推荐
- 《从陷阱中学习C/C++》读书笔记
- C++11之智能指针(上)
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习9
- 心动C++ 情牵基础算法 II
- VC++常用分配内存函数简介及比较
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习8
- NDK之CPLUSPLUS-SUPPORT(C++支持的android NDK)
- c语言strcat实现
- c语言strcpy实现
- 【第八课:C++和opencv】图像的腐蚀+控制条
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习7
- 【第七课:C++和opencv】图像的膨胀+控制条
- C++中的多态性
- C语言 - 两个数互换(不使用第三方变量)
- Keil C51对C语言的关键词扩展之十三: sfr
- 第十六节自动配置cpp文件的mk
- INSERTION-SORT(A)的C++代码
- 数字游戏 (2013年11月24日 蓝桥杯校内选拔赛c\c++B组)
- 回文数字 (2013年11月24日 蓝桥杯校内选拔赛c\c++B组)
- 取石子(好学的C++)