C 类型限定符const 和volatile
1、const
通常在声明中,const出现在存储类型之后,数据类型之前。
如:
static const int a=3;//a 是一个静态存储类型的整形常量
由于已经用const限定了a的类型,我们可以对a进行初始化,但以后不能再对a赋值,增量和减量操作。
虽然对使用const对变量作了限制,也不能在另一个声明中用变量描述数组的大小。
错误使用例1:
const int k=3;
int array[k];//错误
因此,由const限定的变量与符号常量是不等价的。
错误使用例2:
由const 限定的变量的地址赋值给非限定的指针。
const int a=7;
int *p=&a;//错误
错误原因:p是一个普通的指向int的指针,随后我们可以在像++*p这样的表达式中使用它,但那将会改变a的值,这与a的常量的概率是相违背的。
正确使用例2:
const int a =7;
const int *p=&a;//p是一个指向int型常量的指针,其初始值是a的地址。
注意:p本身不是常量,我们可以用一些其他的地址向他赋值,但我们不能向*p赋值,不应该修改p指向的对象。
假设我们要使p本身是常量,而不是a,则可以用如下的方式声明完成:
int a;
int *const p=&a;//p是一个指向int的常量指针。此后我们不能向P赋值,但却可以向*p赋值。