const变量
来源:互联网 发布:制作app软件 编辑:程序博客网 时间:2024/06/06 02:55
const是一个C语言的关键字,它限定一个变量不允许被改变。
主要作用:
(1)可以定义const常量,具有不可变性。
例如:const int Max=100; Max++会产生错误;
(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
例如: void f(const int i) { .........}编译器就会知道i是一个常量,不允许修改;
(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变!
如(1)中,如果想修改Max的内容,只需要:const int Max=you want;即可!
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;
例如: void f(const int i) { i=10;//error! }
注意const是变量不是常量:
const int n = 5;
int a[n];
这种赋值是错误的,
这个问题讨论的是“常量”与“只读变量”的区别。常量,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的,“常量”不等于“不可变的变量”。但是在C++中,局部数组是可以使用变量作为其长度的。
但是在标准C++中,这样定义的是一个常量,这种写法是对的。实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是ANSI C对数组的规定限制了它(实际上用GCC或VS2005编译以上代码,确实没有错误产生,也没有给出警告)。
我们可以用define来定义宏或者用枚举来定义常量。
注意指针的const:
如下面这个语句:
typedef char * pStr;
char string[4] = "bbc";
const char *p1 =" string"; //1式
const pStr p2 =" string"; //2式
p1++;
p2++;
p2++是错的,
因为const使用的基本形式: const type m;限定m不可变。替换基本形式中的m为1式中的*p1,替换后const char *p1;限定*p1不可变,当然p1是可变的,因此问题中p1++是对的。替换基本形式中的type为2式中的pStr,替换后const pStr m;限定m不可变,题中的pStr就是一种新类型,因此问题中p2不可变,p2++是错误的。
- const变量
- const变量
- const变量
- const变量
- const变量
- const 变量
- const变量
- const函数,const变量
- cosnt、const函数、const变量
- const 成员变量
- C++ const变量机制
- 关于const变量
- 关于const修饰变量
- const 和static 变量
- const 变量的问题
- const修饰指针 变量
- const变量的优点
- const与变量
- C++头文件与实现文件分别写什么
- 如何优化ListView
- Python代码追踪(类似于bash -x的效果)
- Regex 手机号 座机 正则表达式
- Ubuntu下iptables使用记录
- const变量
- Codeforces Round #313 (Div. 2) C. Geralds Hexagon(补大三角.cpp
- JQuery 效果之隐藏与显示、淡入淡出、滑动、回调
- 【JavaSE】day01_ API文档 、 字符串基本操作
- poj 1847 Tram
- 【机房收费系统】——上下机
- MyBatis执行动态sql及存储过程
- 8-20
- Android学习笔记(九)