C基础之CONST
来源:互联网 发布:php curl 下载pdf文件 编辑:程序博客网 时间:2024/06/10 09:28
C语言的基础知识是最重要的,即使内核的一些东西都是各个基础知识的综合运用。有些程序不理解其实就是对基础概念理解不透彻,或者说比较含糊。下面说说对CONST的基本理解。
const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。const不是意味着“常量”,可以理解为“只读”。其值不可修改。不是说它的值永远都不能改,是指它修饰的字符不能去修改它的值。可以通过指针或者其它方式修改它的值。
const定义的常量叫做常变量原因有二:
const定义常量像变量一样检查类型
const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同
1、常整型数(变量常量化)
const int a;
int const a;
两个效果是一样的。表示a是一个常整型数。
例:
const int a = 1;
int *p=&a;
*p=100;
上面例子说明了:const修饰的内容不是说a的内存的数据不能修改,而是说他限制了通过当前指定的修饰符a(标签符)去改变内存的值。它可以通过指针去修改它的值。
2、常量指针
const int *p;
int const *p;
两个效果是一样的。表示一个常量指针。
常量化的是指针所指向的目标数据。指针指向可以变化。
字面理解:可以理解为常量化了数据的指针,指针本身可变。
3、指针常量
int * const p;
常量化的是指针变量的值,指针变量的值不能变,指针变量的指向不能变,指针所指向的目标的值可以变化。
字面理解:可以理解为指针化的常量,是个常量,被修饰为指针。因为是常量所以被修饰为指针后它的指向就肯定不能变了。但内容可以变。
4、const int * const p;
即不能更改指针的指向也不能更改指针所指向内容的值(变量的值)。
5、const用于函数参数
例:int sum(const int arry[ ],int n);
const告诉编译器,该函数不能修改arry指向的数组的内容。这样使用并不是要求原数组是常量,而是该函数在处理数组时将它视为常量,这样使用const可以保护数组的数据不被修改。同样的,const int arry[ ]用const int *p代替也成立,表示p所指向的地址的内容不能被修改。
像这样的函数在内核里面随处可见。
6、用const 修饰函数的返回值
如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
例如函数
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
7、const初始化
常量必须初始化
- C基础之CONST
- c语言基础之const
- iPhone第五天之C基础--const变量
- c++基础之const
- C语言基础指针之const char *p,char const *p,,cahr * const p 三者之间的区别
- c/c++之const
- C语言之const
- C语言之const
- C-关键字之const
- C语言基础-const用法
- C基础 const volatile等
- C++基础之const对象
- C++基础之const系列
- c++基础之const指针
- [C]C语言基础巩固专题----const
- C语言修饰词之const
- C/C++之const关键字
- C/C++ Const之我见
- es6学习-let和const命令
- 【LeetCode笔记】判断一棵树是否为镜像
- 文章标题
- EM-Tree + Paragraph2vector 实现大规模文档聚类
- 把获取的维基百科主页词条及链接存入mysql数据库
- C基础之CONST
- EasyUI之选项卡Tabs
- Metasploit中配置beef
- 利用栈实现队列的操作
- java获取项目的绝对路径
- Search a 2D Matrix II
- 数据库事务隔离级别
- LeetCode 01
- python学习笔记