原文:http://www.cnblogs.com/Dezhong-chen/p/4734516.html
const型变量
如果在程序中需要经常使用某一常量,可以使用编译预处理命令定义符号常量。
eg:#define PI 3.14159
const型变量也是一种定义常量的手段。const型变量是特殊的变量,程序运行过程中不可改变,其他特性和变量一样。定义const变量时必须初始化。
eg:
const int Max=1000; //int和const位置可以交换。
const常量与符号常量的区别:
1)符号常量由预编译器处理,const型变量由变量处理。
2)在编译时符号常量已经不存在了,而const常量依然存在。
3)符号常量的作用域从定义位置开始,到源文件结束,而const型变量和一般变量一样。
指向const对象的指针
其指向的对象是const的,不能被修改,但是其本身并不是const的,可以修改其指向的地址。
声明方式为:
const int *p;
此代码是正确的,先声明了一个指向const对象的指针,然后在tes函数中将其指向c变量。 此编码编译错误。
t.cpp: In function 'void tes()':
t.cpp:6:5: error: assignment of read-only location '* a'
因为a所指向的对象是const的,不能修改。
注意:不能将一个const对象的地址赋给一个指向非const对象的指针;但可以将一个非const对象的地址赋给一个指向const对象指针;
const指针
此指针指向的地址是不能够改变的,但是其指向的对象是可以被修改的,其定义类似:
int* const p=地址;
比如下面的代码:
此代码是正确的,先声明了变量b,然后声明一个const指针a,此指针指向变量b,在tes函数中修改指针a所指向的对象的值。
如果将代码修改为:
再编译就会出错:
t.cpp: In function 'void tes()':
t.cpp:6:5: error: assignment of read-only variable 'a'
因为指针a是const的,不能被重新赋值。