C语言中const关键字的作用

        const是一个C语言(ANSIC)的关键字,具有着举足轻重的地位。它限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。

1.定义

        const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的,不能进行二次修改,也可以理解为一锤定音。

2.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 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程,虽然有了静态特性,但并不是说它变成了静态变量。

3.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在*的右边不能改变指针的指向;

 


4.函数形参中const的作用

        下面是strcpy函数的形式参数,strcpy是一个字符串拷贝函数,它的作用就是将一个字符串的内容(source),拷贝到另一个字符串中(destination)。 

        那么源头字符串的内容必须是固定的,给 source 加上 const 修饰后,如果函数体内的语句试图改动 source 的内容,编译器将报错!!!

 

                                                好了以上就是const的作用讲解,觉得有用的话,给作者点个赞吧!

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙予清的zzz~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值