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

 const int abc=;

 int *p=&abc;

 *p=;

 printf("%d\n",abc); //
 const int* p; //p可改变,p指向的内容不可改变

 int const* p; //p可变,p指向的内容不可改变

 int* const p; //p不可变,p指向的内容可变

 const int* const p; //p和p指向的内容都不可变

 //当const出现在*左边的时候,指针指向的内容不可改变

 //当const出现在*右边的时候,指针本身的内容不可改变    

 内容不可变,不是绝对的,任然可以通过指针改变其内容  左数右指:在左边,数据内容不可变;在右边,指针内容不可变

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

 const int* func()

 {

   static int count = ;

   count++;

   return &count;

 }

 int main()

 {

   int i = ;

   const int* p=func();

   printf("%d\n",*p);

   return ;

 }
 const int* func()

 {

   static int count = ;

   count++;

   return &count;

 }

 int main()

 {

   int i = ;

   int* p=func();  // 会报出错

   printf("%d\n",*p);

   return ;

 }

volatile:用于告诉编译器每次去内存中取变量的值,不去做优化;主要修饰可能被多个线程访问的变量;也可以修饰被未知因素被改变的变量:
编译器的优化:如果发现某个变量从未出现过在赋值左边的情况,那么这个变量就直接替换成其值,但是如果被其他因素修改,所以就会出错。

 volatile int i=;

const和volatile分析的更多相关文章

  1. 第9课 - const 和 volatile分析

    第9课 - const和volatile分析 1. const只读变量 (1)const修饰的变量是只读的,本质上还是变量,并不是真正意义上的常量         ※※ const只是告诉编译器该变量 ...

  2. 第9课 const和volatile分析

    1. const只读变量——(注意不是真正常量,只是告诉编译器不能出现在赋值号左边!) (1)const修饰的变量是只读的,本质还是变量 (2)const修饰的局部变量在栈上分配空间 (3)const ...

  3. C语言进阶——const 和 volatile 分析09

    const只读变量: const修饰的变量是只读的,本质还是一个变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局函数区分配资源空间 const只在编译器有用,在运行期无用 ...

  4. C语言-const和volatile深度分析

    1.const只读变量 const修饰的变量是只读的.本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局数据区分配空间 const只在编译期有用,在运行期无用 con ...

  5. C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的const、volatile以及__unaligned属性去掉)

    在C++中,存在类型转换,通常意味着存在缺陷(并非绝对).所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换( ...

  6. C++ const、volatile、mutable的用法 (转)

      const.volatile.mutable的用法 鸣谢作者: http://blog.csdn.net/wuliming_sc/article/details/3717017 const修饰普通 ...

  7. C语言中关键字auto、static、register、const、volatile、extern的作用

    原文:C语言中关键字auto.static.register.const.volatile.extern的作用 关键字auto.static.register.const.volatile.exter ...

  8. const、volatile、mutable的用法

    http://blog.csdn.net/wuliming_sc/article/details/3717017 const.volatile.mutable的用法 const修饰普通变量和指针 co ...

  9. C++ 中 const、volatile、mutable的用法

    @2019-01-14 [小记] C++中const.volatile.mutable的用法

随机推荐

  1. Linux服务器mysql,nginx等自动停止的排查,以及解决方法

    最近发现自己使用的某台云服务武器只要稍微流量大一点,就会出现莫名的的数据库连接错误的情况 ,然后连上服务器查看,发现mysql进程被结束了,经常出现这种情况,这还怎么得了,然后第一时间查看mysql日 ...

  2. 机器学习进阶-图像基本操作-边界补全操作 1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 进行边界的补零操作 2.cv2.BORDER_REPLICATE(边界补零复制操作)...

    1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 参数说明: i ...

  3. JConsole 配置

    Tomcat 1:修改catalina.sh文件如下 JAVA_OPTS="-Djava.rmi.server.hostname=XXX.XXX.XXX.XXX -Dcom.sun.mana ...

  4. SpringBoot配置swagger2(亲测有效,如果没有配置成功,欢迎在下方留言)

    一.导包: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa ...

  5. intellij idea远程debug调试resin4教程

    昨天有个项目部署在阿里云 想远程调试不知道怎么弄.看日志需要账户密码很不方便呀.今天加班特意baidu了下. 1.先在远程的resin修改conf中resin.xml配置文件 在server-defa ...

  6. docker之container

    转自:https://www.cnblogs.com/jsonhc/p/7760144.html 运行一个container的本身就是开启一个具有独立namespace的进程 进程有自己的网络,文件系 ...

  7. upupw

    https://sourceforge.net/projects/upupw/files/ANK/

  8. Oracle数据库备份/导入工具

    expdp和impdp常用于ORACLE数据库的导入导出. expdp导出数据库 1.root用户创建用于impdp/expdp导入导出的目录: # mkdir -p /home/dmpdata # ...

  9. 遍历DOM树,获取子节点

    获取子节点的方法有:  方法  说明  children()  选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点.  find()  选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...

  10. [Sphinx]全文索引Sphinx的使用配置

    -------------------------------------------------------------------------------------- 搜索分为两种: 1. 对结 ...