注:该文主要来源于 网易公开课之《C++ 程序设计入门(上)》课件。

在 C 语言标准中,const 修饰的变量称之为 只读变量,

在 C++ 语言标准中,const 修饰的变量称之为 常量,

例:

const int ARRAY_LEN = 100;

int array[ARRAY_LEN];    //该语句在C++ 编译器中是可行的,但是在C编译器中是会报错的

以上是 const 在 C 和 C++ 中的差别,下边主要介绍 const 与指针:

1. 指针的两个属性

a. 指针变量本身

b. 指针变量所指向的内容

2. 常量指针和指针常量

a. 常量指针(常指针):指针(p)所指向的内容不能通过指针的间接引用(*p)来改变

例:

const int i = 0;

const int* p1 = &i;    //指针 p1 的类型是 const int*

*p1 = 10;    //error

b. 指针常量:指针本身的内容是一个常量,不可以改变

例:

int a = 1;

int b = 2;

int* const p = &a;    //常量 p2 的类型是 int*

*p2 = 10;    //ok, a = 10

p = &b;    //error

注:数组名是数组首地址的别名,可以说 数组名就是一个指针常量,所以 :

int a[] = {1, 2, 3, 4};

a = a + 1;    //error

3. 变量、常量和常量指针

a.

int i = 10;

int const *pi = &i;

*pi = 11;    //error

i = 11;    //ok

上述语句只是说明 pi 指向的地址中所存的内容不能通过 *pi 的方式被改变;

b.

const int ci = 10;

const int* pci = &ci;

*pci = 11;    //error

ci = 11;    //error

上述语句说明 ci 是一个常量,存放在常量区,不能被改变,pci 指向的地址中所存的内容不能通过 *pci 的方式被改变;

c.

const int ci = 10;

int* pci = &ci;    //error

上述语句说明 ci 是一个常量,存放在常量区,不能被改变,也不能通过 *pci 的方式被改变,所以指向 ci 的指针必须是常量指针。

总结:

const int* p;    //语句1

int const *p;    //语句2

int* const p;    //语句3

在前先读,在前不变

*(指针) 和 const(常量)谁在前先读谁;

* 代表被指的数据,名字代表指针地址;

const 在谁的前面谁就不能被改变。

④ 语句1 和语句2 等价

最新文章

  1. Visual Studio 2015 各版本对比及下载地址
  2. iOS之两个ImageView实现图片滚动
  3. android快速入门
  4. PHP脚本redis类的实例源码
  5. 工作随笔记 点击除div自身之外的地方,关闭自己
  6. amcharts 网页绘图插件
  7. #pragma alloc_text 与 ALLOC_PRAGMA
  8. opencart 模块开发详解
  9. jQuery的选择器中的通配符[id^='code']或[name^='code']
  10. select option 下拉多选单选bootstrap插件使用总结2
  11. ASA IPSEC VPN配置
  12. MAC下安装如何安装mysql?
  13. Mysql 5 忘记root密码,设置免密登陆
  14. C#正则表达式。
  15. JavaScript对象数组根据某属性sort升降序排序
  16. 解决rpm conflicts with file from package的两个方法
  17. html锚点定位不准确问题
  18. java基础---->多线程之Runnable(一)
  19. Python爬虫基础(三)urllib2库的高级使用
  20. Python面试题(十一)

热门文章

  1. erlang 符号相关基本语法
  2. freemarker中间split字符串切割
  3. 还是Qt 通过stylesheet或者palette设置背景色的问题
  4. 在intellij idea 中怎么不用git 解除关联
  5. 【21.28%】【codeforces 707D】Persistent Bookcase
  6. jquery 源码学习(三)
  7. Failed during checkstyle execution: Unable to find suppressions file at location: src/checkstyle/checkstyle-suppressions.xml
  8. Spring Boot中集成Spring Security 专题
  9. .net core下,Ocelot网关与Spring Cloud Gateway网关的对比测试
  10. 使用Wireshark抓取SNMP Trap包