const与指针类型

定义一个指针*p:

const int* p = NULL;
int const* p = NULL; int* const p = NULL;

上面两行定义完全等价,第三行则不同。

下面两行定义也完全等价:

const int* const p = NULL;
int const* const p = NULL;

举例说明:

int x = 3;
const int* p = &x;
//p=&y; 正确
//*p=4; 错误

const修饰的是*p,所以通过*p修改x的值是错误的。

int x = 3;
int* const p = NULL;
//p=&y; 错误

const修饰的是p,p只能指向一个地址,不能再改变。

const int x = 3;
const int* const p = &x;
//p=&y; *p=4; 都是错误的

上面这种情况,就不能再做任何修改。

const与引用类型

int x = 3;
const int& y = x;
//x=10; 正确
//y=20; 错误

y被const修饰,所以不能通过y去修改x的值。

更多示例:

const int x = 5;
x = 5; //错误 int x = 3;
const int y = x;
y = 5; //错误 int x = 3;
const int* y = &x;
*y = 5; //错误
int x = 3, z = 4;
int* const y = &x;
y = &z; //错误 const int x = 3;
const int& y = x;
y = 5; //错误
const int x = 3;
int* y = &x; //错误 int x = 3;
const int* y = &x; //正确

上面这个示例,前者x是不可变的,而y是可变的,如果我们定义一个可变的指针指向一个不可变的变量,那么这就意味着存在风险,我们可以通过指针去修改x的值,这种情况编译器是不允许存在的,所以错误;对于后者,指针只有读权限,x则有读和写的权限,我们用一个权限小的对象接受一个权限大的对象这是允许的,而用一个权限大的对象接受一个权限小的对象则不允许。

最新文章

  1. windows 2003自动登录的具体步骤
  2. h5移动端-1
  3. linux奇技淫巧
  4. centos 升级 python后 python-setuptools pip 安装依赖报错
  5. js去掉空格
  6. 无法加载 DLL“rasapi32.dll”: 动态链接库(DLL)初始化例程失败。
  7. 怎么用MindMapper分类功能整理导图
  8. ASP.NET vNext 在 Mac OS
  9. commitProperties方法
  10. 用golang 实现一个代理池
  11. java基础(十二 )-----Java泛型详解
  12. JQuery实现数组移除指定元素
  13. ClientDataSet应用
  14. 与python的三天
  15. mysql主从复制(半同步方式)
  16. Jquery 组 tbale表格隔行变色
  17. AT2567 RGB Sequence dp
  18. 安装rlwrap方便sqlplus使用
  19. python第三十六课——2.迭代器对象
  20. Java通过ssh连接到Linxu和Windos服务器远程启动Tomcat

热门文章

  1. JAVA WebSocket 使用时需要注意的地方
  2. Ubuntu下cc和gcc的关系
  3. ThreeJS 物理材质shader源码分析(像素着色器)
  4. 使用 web3D 技术的风力发电场展示
  5. PyCharm2019.3.3专业版完美激活
  6. angular之模块开发一
  7. 如何最快实现物流即使查询功能-物流轨迹查询API
  8. tmobst3an
  9. Lighthouse
  10. 【VC++开发实战】迅雷晒密及批量查询流量程序