C语言const用法简介

来源:互联网 发布:尺度最大的网络女主播 编辑:程序博客网 时间:2024/06/02 03:33

const 的好处,是引入了常量的概念,让我们不要去修改不该修改的内存。直接的作用就是让更多的逻辑错误在编译期被发现。所以我们要尽可能的多使用const。

1 定义常量变量

const 关键字把一个变量声明转换成常量声明

const int MONTHS = 12;// MONTHS代表12的符合常量

在初始化以后,MONTHS成为一个只读值,不能通过赋值、增量或减量运算来改变该变量的值可以用关键字 const 创建一组不可改变的数据:

const int days[2] = {31, 29};

2 const char * pf 

在指针和参数声明中使用const 时,需要把让指针本身成为 const 与让指针指向的值成为 const 区分开来

const char * pf = "abc" ; // pf指向一个字符串常量

char const * pf2 = "123" ; // 与上面声明等价

上面的声明表面 pf 指向的值必须保持不变,但是 pf 本身的值可以改变,例如,它可以指向另一个const 值

pf = pf2 ;      // pf 指向新的字符串常量// pf [0] = pf2[0] ;    // 错误,pf 指向的值不能改变

3 char * const pt 

char * const pt = "abc" ;// pt 是一个常量指针

它必须指向同一个地址,但是所指向地址的内容可以改变

pt[0] = pf[0] ;     // pt 所指向地址的内容改变// pt = pf ;    // 错误,pt 指向地址不能改变

一个位于 * 左边任意位置的 const 使得数据成为常量,而一个位于 * 右边的 const 使得指针成为常量。

4 保护实参数据

const 的常见用法是声明作为函数形参的指针,可能需要把数组名作为实际参数传递,但是数组名是一个地址,这样将运行函数改变数组中的数据,下面的原型防止了这样的情况发生:

void show( const char str[], int n);

该声明表面str 所指向的数据是不可变的,因此如果指针只是用来让函数访问值,将它声明为const 受限指针;如果指针被用来改变调用函数中的数据,则不使用 const。

在函数参数声明中const一般用来声明指针而不是变量本身。

对于另一个参数 n ,如果在函数实现时完全不需要修改它的值,那么 n 是否也应该用 const 声明为常量呢?可以这么做,如果加了const,那么对于这个函数的实现者,可以防止他在实现这个函数的时候修改不需要修改的值(n),这样很好。但是对于这个函数的使用者:

  1. 这个修饰符号毫无意义,我们可以传递一个常量整数或者一个非常量整数过去,反正对方获得的只是我们传递的一个复制。
  2. 暴露了实现。我不需要知道你在实现这个函数的时候是否修改过 n 的值。

5 全局变量使用 const

使用全局变量被认为是一个冒险的方法,因为它使得程序的任何部分都可以修改数据,增加了程序的不可控性。如果需要,尽可能多的使用 const 。

1 0
原创粉丝点击