C 类型限定符const 和volatile
2013-06-23 13:57
337 查看
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赋值。
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赋值。
相关文章推荐
- linux C编程(三)ANSI C中的类型限定词(const/volatile/restrict)
- ANSI C的三个类型限定词:const,volatile,restrict
- C语言中const、volatile、restrict等类型限定符的区别
- ERROR C3848:具有类型"const XXX" 的表达式会丢失一些 const-volatile 限定符以调用"YYY" with"ZZZ"
- C++ 变量和基本类型(二) const 限定符
- 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
- [C] 类型限定词volatile——《C Primer Plus》
- C语言中类型限定符(qualifier)之一const
- 第二章 变量和基本类型——2.4 const 限定符
- 将'const xxx'作为'xxx'的'this'实参时丢弃了类型限定
- 限定词const和volatile的使用
- 类型限定词volatile
- C语言类型限定修饰符(十八)const、(*)、
- 小议C和C++中的const类型限定符
- C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的const、volatile以及__unaligned属性去掉)
- 笔记(8)类型限定词const等
- sig_atomic_t类型与volatile限定符
- C关于类型限定符const的2个典型错误!
- C语言的const类型限定符
- C++ 中const 类型限定符不兼容问题