博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
const和volatile分析
阅读量:5088 次
发布时间:2019-06-13

本文共 1143 字,大约阅读时间需要 3 分钟。

c语言中const修饰的变量是只读的,不能直接作为赋值号的左值,其本质还是变量;会占用内存空间;本质上const在编译器有用,运行时无用(还是可以通过指针改变它的值)

1 const int abc=1;2 3 int *p=&abc;4 5 *p=3;6 7 printf("%d\n",abc); //3
1 const int* p; //p可改变,p指向的内容不可改变 2  3 int const* p; //p可变,p指向的内容不可改变 4  5 int* const p; //p不可变,p指向的内容可变 6  7 const int* const p; //p和p指向的内容都不可变 8  9 //当const出现在*左边的时候,指针指向的内容不可改变10 11 //当const出现在*右边的时候,指针本身的内容不可改变    12 13 内容不可变,不是绝对的,任然可以通过指针改变其内容  左数右指:在左边,数据内容不可变;在右边,指针内容不可变

const修饰的函数参数表示在函数体内不希望被改变;const修饰的函数返回值表示返回值不可改变,多用于返回指针的情形。

1 const int* func() 2  3 { 4  5   static int count = 0; 6  7   count++; 8  9   return &count;10 11 }12 13 int main()14 15 {16 17   int i = 0;18 19   const int* p=func();20 21   printf("%d\n",*p);22 23   return 0;24 25 }
1 const int* func() 2  3 { 4  5   static int count = 0; 6  7   count++; 8  9   return &count;10 11 }12 13 int main()14 15 {16 17   int i = 0;18 19   int* p=func();  // 会报出错20 21   printf("%d\n",*p);22 23   return 0;24 25 }

volatile:用于告诉编译器每次去内存中取变量的值,不去做优化;主要修饰可能被多个线程访问的变量;也可以修饰被未知因素被改变的变量:

编译器的优化:如果发现某个变量从未出现过在赋值左边的情况,那么这个变量就直接替换成其值,但是如果被其他因素修改,所以就会出错。

1 volatile int i=0;

 

转载于:https://www.cnblogs.com/data1213/p/4821162.html

你可能感兴趣的文章
<a>标签中的href伪协议 ...
查看>>
java初始化过程中成员变量
查看>>
20145322 《信息安全系统设计基础》第十周学习总结
查看>>
babel常识备忘
查看>>
js中的事件代理(委托)
查看>>
Django组件——分页器和中间件
查看>>
scala 14 trait
查看>>
You need to run build with JDK or have tools.jar问题解决
查看>>
BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
查看>>
HDU 3949 XOR [高斯消元XOR 线性基]
查看>>
LeetCode Best Time to Buy and Sell Stock III
查看>>
PHP变量引用赋值后unset 输出原始变量,值存在.
查看>>
简单的新浪微博爬虫-Python版-(下载部分)---(上)
查看>>
for-each用法误区(不能改变数组元素值)
查看>>
f.select
查看>>
SSH2各部分作用
查看>>
不设置默认网关,导致traceroute无法获取途经路由信息原因
查看>>
MySql优化—删除操作
查看>>
三天打渔两天晒网
查看>>
python编码的那些事
查看>>