您的位置:首页 > 编程语言 > C语言/C++

C语言中const关键字的用法大全(包含与#define的区别)

2017-03-28 09:33 603 查看

C语言中const关键字的用法大全(包含与#define的区别)

    有标题党的嫌疑,但是本文列出了基本经典书中相关的描述,确保正确,方便大家学习。

《K&R》

任何变量的声明都可以使用const限定符限定。该限定符指定变量的值不能被修改。对数组而言,const限定符指定数组所有元素的值都不能被修改const限定符也可配合数组参数使用,它表明函数不能修改数组元素的值。如果试图修改const限定符限定的值,其结果取决于具体的实现。

const用于声明可以存放在只读存储器中的对象,并可

能提高优化的可能性。

可以对const对象进行初始化,但在初始化以后不能进行赋值。

《C语言程序设计现代方法》第二版

C语言中总共有两种类型限定符;const和volatile。const用来声明一些类似于变量的对象,但这些变量是“只读”的。程序可以访问const型对象的值,但是无法改变它的值。

用const来说明对象的值不会改变,有几个好处:

1.const是文档格式。声明对象是const类型就是提示任何稍后阅读程序的人,对象的值不会改变;

2.编译器可以检查到程序不会特意地试图改变对象的值;

3.当为某种可能的应用类型编写程序时(特别是嵌入式系统),编译器可以用单词const来确定数据存储到ROM(只读内存)中。

#define和const之间有明显的差异:

1.可以用#define指令产生数字常量、字符常量或字符串常量的名字。const可用于产生任何类型的只读对象,这包括常量数组、常量指针、常量结构和常量联合;

2.const类型的对象遵循和变量相同的作用域规则,而用#define产生的常量不遵守这些规则。特别是,不能用#define产生具有块作用域的常量;

3.和宏的值不同,可以在调试器中看到const型对象的值;

4.不同于宏,不可以把const型对象用于常量表达式。例如,由于数组边界必须是常量表达式,所以不能用const修饰的变量。

   没有绝对的原则说明何时使用#define和何时使用const。建议对表示数字或符号的常量使用#define。另外,还能使用常量作为数组维数,并且在switch语句或其他要求常量表达式的地方使用常量。使用const主要是为了保护存储在数组中的常量数据。

《C和指针》

由于const修饰的变量,无法把任何东西赋值给它,如此一来,你怎样才能让它在一开始拥有一个值呢?

两种方法:

1.在声明的同时进行初始化。如:int const a = 15;

2.在函数中声明为const的形参,在函数被调用时会得到实参的值。

当涉及指针变量时,情况更加有趣,因为有两样东西有可能成为常量--指针变量和它所指向的实体。

如:

int *pi;                           // pi是一个普通的指向整型的指针。

int const *pci;              // pci是一个指向整型常量的指针,可以修改指针的值,但是不能修改它所指向的值。

int *const cpi;              // cpi是一个指向整型的常量指针,此时指针是只读的,它的值无法修改,但可以修改它所指向的整型的值。

int const * const cpci;// cpci和其指向的值都是只读的,不允许修改。

    #define指令是另一种创建名字常量的机制,只要允许使用字面值常量的地方都可以使用#define创建的常量,const变量只能用于允许使用变量的地方。

    名字常量非常有用,用名字常量定义数组的长度或限制循环的计数器能够提高程序的可维护性---如果一个值必须修改,只需要修改声明就可以了。修改声明比搜索整个程序修改字面值常量的所有实例要容易得多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 const #define