C
语言中
const
关键字是
constant
的缩写,译为常量、常数等,但
const
关键字不仅仅是用于定义常量,还 可以用于修饰数组、指针、函数参数等。
1)
修饰变量
C
语言中使用
const
修饰变量,功能是对变量声明为只读特性,并保护变量值以防被修改。例如:
const int
i
=
5
;
这个例子表明整形变量
i
具有只读性,不能够被修改;若想对其重新赋值,例如
i=10
则是错误的用法。需
要注意的是,
const
定义变量的同时还必须对其初始化,
const
可以放在数据类型的前面或者后面,比如上述
例子也可以写成:
int const
i
=
5
此外,
const
修饰变量还起到了节约空间的目的,通常编译器并不给普通
const
只读变量分配空间,而是 将它们保存在符号列表中,无需读写内存操作,程序执行效率也会提高。
2)修饰指针
C
语言中
const
修饰指针需要特别注意,共有两种形式,一种是用来限定指向空间的值不可修改;另一种 是限定指针不可修改,例如:
int
i
=
5
;
int
k
=
10
;
int const
*
p1
= &
i;
int
*
const
p2
= &
k;
对于指针
p1
,
const
修饰的是
*p1
,即
p1
指向的空间的值不可改变,例如
*p1 = 20;
就是错误的用法;但是 p1的值是可以改变的,例如
p1 = &k;
则没有任何问题。
对于指针
p2
,
const
修饰的是
p2
,即指针本身
p2
不可更改,而指针指向空间的值是可以改变的,例如
*p2 = 15;是没有问题的,而
p2 = &i;
则是错误的用法。
3)
修饰函数参数
在
C
语言中
const
修饰函数参数对参数起限定作用,防止其在函数内部被意外修改,所限定的参数可以是 普通变量也可以是指针变量。
1. 函数指针名中的const修饰:
例如: void (*const task_handle)(void);
*const 修饰这个函数指针,函数指针本质也是地址,加上const 意思是这个函数指针地址不会变,因为函数指针是会被调用的,如果地址改变,可能调用就会出错。
void (*const task_handle)(void) =uart_task_handle;
void uart_task_handle(void)
{
//串口处理函数
}
2. 参数中的const
int save_data(void const *buf,int len )
调用函数时会传递参数,形参指针指向一个数组或者变量。
const
修饰
*buf
,
*buf 指针指向的数据内容不能改变。