const的意思可以概括为 “一个不能被改变的普通变量” ,使得const在一定程度上提高程序的安全性和可靠性。

const的几种情况:

1. const的普通用法

int const size;
const int size;

这两条语句都是把size声明为一个整数,他的值不能被修改。

可以在声明的时候对他进行初始化,

int const size =10;

错误用法:

const int size =10;
char buffer[size];  

错误在于,size占用某内存块,C编译器不知道它在编译的值。并且,C默认const是外部连接的,所以写成const是可以的。

2.const用于指针

(1)

const int *p;
int const *p; //含义是指向常量的指针,指针的常量值不可以修改

两者相同,p是一个指向整形常亮的指针,可以修改指针的值,但不能修改指针所指向的值。

int b = 5;
int c = 3;
const int *p=&b;
*p=6; //错误,不能通过指针修改所指向的值;
p=&c; //正确,可以修改指针的值  

(2)

int * const p;   //含义是常量指针,p的值不可以修改

p是一个指针,指针p是常量,它的值无法修改,但是可以修改p所指向的整型的值。

int b = 5;
int c = 3;
int *const p = &b;
*p = 6; //正确,可以修改指针所值向的值
p =&c; //错误,不可以修改指针的值 

(3)

const int * const p;

无论是指针本身还是它所指向的值都是常量。

简单的判断的方法:

  • 如果const在  *  的左侧,则const用来修饰指针所指向的变量,即指针指向位常量;
  • 如果const位于 * 的右侧,则const就是修饰指针本身,即指针本身就是常量。

3.const用于函数的形参

void foo(const int * p)

const用于形参时说明了形参在函数内部不会被改变。这种形式通常用于数组形式的参数中模拟传值调用。这也是const最有用之处,限定函数的形参,这样该函数将不会修改实参指针所指向的数据。这里需要注意得的是,是函数不应该去修改而不是不能修改。

4.声明常量的其他方法

C语言中可以用enum类型和#define宏来定义常量

#define MAX_SIZE 10;
int const max_size =10;

此处使用#define比使用const变量更好。

只要允许使用字面值常量的地方都可以使用前者,比如声明数组的长度。

const变量只能用于允许使用变量的地方。 

最新文章

  1. SQL简单语法
  2. WeX5学习笔记-建立项目且从SVN获取版本
  3. 通过TTL值判断系统
  4. [Android Pro] RecyclerView实现瀑布流效果(二)
  5. 省市区三级联动(二)JS部分简单版
  6. ServiceStack.Redis 使用教程
  7. 酷狗音乐盒缓存文件夹KuGouCache的设置方法
  8. 【分享】生成Revit扩展的addin文件小工具
  9. ios网络学习------1get post异步请求
  10. 用Owin Host实现脱离IIS跑Web API单元测试
  11. 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
  12. zepto的源代码注释(转)
  13. php调用webservice接口
  14. java常用类--字符串
  15. 习题9-4 uva 1630
  16. Kubernetes 1.10.4 镜像 版本
  17. loadrunner 基础-学习笔记一
  18. [No000014E]提问的智慧How To Ask Questions The Smart Way
  19. 类型重命名 typedef
  20. JavaScript位运算符 2

热门文章

  1. myBatis分页插件配置
  2. 关于css实现单行、多行省略标记
  3. 还是要精简开发呀,VS2015太大,VS2010不想装
  4. 浏览器-http协议简介
  5. phpStudy:使用localhost无法访问的解决方案
  6. ubuntu linux查看cpu信息
  7. UE4工具
  8. 我的visual studio 配色方案 Rubik c++版
  9. 使用Atom编写Makedown
  10. 【转】你是不是也被Android Private Libraries、Referenced Libraries、android Dependency搞晕了~~