const是一个C语言(ANSIC)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的,不能进行二次修改,也可以理解为一锤定音。
int main() {
int n = 10;//给N初始化
n = 20;//改变n初始化的值并重新赋值n为20
printf("%d\n", n);//20
如上图代码,一般情况下,变量的创建和使用都是可以进行赋值与修改的。
const修饰局部变量:
//但加上const
const int a = 10;
int const b = 20;
a = 50;//err
b = 100;//err,同理
a变量和b变量都被const修饰了,不能再修改,初始化的值就是它们最终的值.
总结:const是用来固定变量的值的作用,相当于给变量上锁。
const修饰全局变量 :
全局变量是作用于整个程序的,且全局变量的生命周期为程序运行的整个过程,所以我们应该尽量避免使用全局变量,一旦某个函数改变了全局变量的值,会影响到其他引用这个变量的函数,所以全局变量虽然能被广泛使用,但这是优点也是其缺点,它的安全性就很低!
如果一定要用全局变量,应该尽量的使用const进行修饰,防止不经意写下的代码代码对其修改,使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程,虽然有了静态特性,但并不是说它变成了静态变量。
一般情况下,指针的使用方法就是--关联某变量的地址,间接修改其变量值。
int main(){
int t = 100;
int o = 10;
printf("t:%d o:%d\n", t, o);
int* p = &t;
*p = 50;//指针解引用
printf("t:%d\n", t);
p = &o;
*p = 70;//指针解引用
printf("o:%d\n", o);
return 0;
}
当const的位置处在数据类型*之前时:常量指针
//const作用2:作用于指针
int aa = 10;
int bb = 100;
//情况1:const放在指针左边
const int* ptr = &aa;
*ptr = 50;//err报错
ptr = &bb;
指针不能对变量aa执行解引用操作,但指针可以换一个变量关联其地址。
当const的位置处在数据类型*之后时:指针常量
//情况2:const放在指针右边
int* const str = &aa;
*str = 50;
str = &bb;//err报错
指针可以对变量aa进行解引用,但指针不能关联其他变量(bb)的地址。
当const的位置在数据类型*的两边时: 指向常量的常指针
//情况3:const放在指针两边
const int* const ppa = &aa;
*ppa = 250;//err报错
ppa = &bb; //err报错
指针既不能对变量aa解引用,又不能关联变量bb的地址。
总结:
口诀:左定值,右定向。
即 const在*的左边不能改变字符串常量的值;
const在*的右边不能改变指针的指向;
下面是strcpy函数的形式参数,strcpy是一个字符串拷贝函数,它的作用就是将一个字符串的内容(source),拷贝到另一个字符串中(destination)。
那么源头字符串的内容必须是固定的,给 source 加上 const 修饰后,如果函数体内的语句试图改动 source 的内容,编译器将报错!!!
好了以上就是const的作用讲解,觉得有用的话,给作者点个赞吧!