C语言:const关键字用法

const关键字在C语言中用于保护数据不被修改,即设置数据为只读模式。具体有以下几种用法:
1. const创建变量

const double PI = 3.1415926; /* const 变量 */
const int days[5] = {0, 1, 2, 3, 4};    /* const 数组 */

对于const变量和const数组,只能在定义的时候将其初始化,定义完成后即会变成只读模式,其他任何时候再去尝试改变其值都会造成编译错误。
例如,再将上诉的PI = 2.14;都是错误的,对于数组也是一样。
2. 对形式参数使用const:
在函数参数指针传递的时候,我们有时候只是想调用的函数使用参数的值而非改变它。对此,我们可以使用const关键字限定函数的形式参数,函数声明如下:

int function(const char *Str, int len);

对于function函数,参数Str的内容是在函数中是只读的,不允许被改变的。但在函数之外的位置却是一个允许读写操作的,不必将Str变量定义为const变量,以至于全局只读。这样既兼顾了数据的安全,也不妨碍其读写的自由。
3. const与指针
const声明的指针有三种:只读指针,位置固定指针,位置固定且为只读的指针。

int buffer[3] = {0, 1, 2};
const int *p1 = buffer;       /* 只读指针 */
int *const p2 = buffer;       /* 位置固定指针 */
const int *const p3 = buffer; /* 位置固定且只读指针 */

A. 只读指针
对于指针p1的定义方式,const修饰的是p1地址的数据,所以p1指向的数据为只读的,即只允许通过指针p1读取buffer中的值,而不允许修改。注意,p1是可以被修改的,即类似p1++;等操作是允许的,表示指向 buffer[1]。

B. 位置固定指针
对于指针p2,const修饰的是p2,即p2为只读的,即p2固定指向数组buffer的起始地址,不能被改变。一般用于记录某一关键位置。例如对p2 = &days[0]等操作都是会造成编译出错的。

C. 位置固定且为只读的指针
最后,在创建指针时还可以使用两次const,改指针既不能更改它所指向的地址,也不能修改指向地址的值,对于指针p3,一些操作都是不允许的:

p3 = &days[0]; /* 不允许 */
*p3 = 999;     /* 不允许 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章