C语言 分析const 和 volatile 关键词

在c语言中,常用const来定义常量,在嵌入式中,const字符可以将常量(数表)直接保存在Flash种。很多的教材中,描述const关键字的作用是,const修饰的变量不可被程序修改,但其实不是这样。const只是让变量不能作为左值,但可以通过取指针操作来修改const变量的值,如:

对const变量进行赋值(非初始化)操作会直接报错:

#include <stdio.h>

int main(void)
{
	const int num = 0;
	
	num = 5;
}

具体报错如下:

这里错误信息提示,左值指定const对象。但是很可惜,const修饰的变量无法作为左值,所以程序直接报错。但是,这并不代表const变量不能被修改。接下来,通过指针操作来修改const变量的值。

指针操作:

#include <stdio.h>

int main(void)
{
	const int num = 0;
	int* ptd = &num;

	printf("origin num is %d, address is %p\n", num, ptd);
	*ptd = 5;	/* 通过指针修改num的值 */
	printf("new num is %d, address is %p\n", num, ptd);
}

这里Visual Studio依然会给出一个warning,说明const变量不同(值被修改),但是可以运行:

警告说明:

接下来是程序输出结果。跟我们的预期一致,const变量的值已经变为5。

至于volatile,在mdk优化等级很高的时候,会出现意想不到的问题,可以参考之前的博客:

https://blog.csdn.net/dingyc_ee/article/details/97567037

这篇博客中记载了不加volatile关键词会出错的实例,也是调试了很久才解决,仅供参考!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值