const和volatile指针之间有什么区别?
发布时间:2020-08-01 15:09:39 所属栏目:Java 来源:互联网
导读:const和volatile指针之间有什么区别? 差异真的归结于const和volatile之间的差异.这两个概念的唯一共同点是语法. const是编译器执行的,并且说“程序员不能改变这个”. volatile表示“这个数据可能被别人改变”,所以编译器不会对这些数据作任何假设.没有变化,
const和volatile指针之间有什么区别? 解决方法差异真的归结于const和volatile之间的差异.这两个概念的唯一共同点是语法. const是编译器执行的,并且说“程序员不能改变这个”. volatile表示“这个数据可能被别人改变”,所以编译器不会对这些数据作任何假设.没有变化,编译器可能会说“我将这些数据从内存放入一个寄存器,而且由于我没有对这些数据做任何事情,我相信它是一样的,我不需要再次读入它. “当数据被标记为volatile时,编译器将不会做出这样的假设(因为其他人可能已经更改了数据),因此它将重新读取数据到寄存器中.现在,你是否要求之间的区别 int *const p; 和 int *volatile q; 或者之间的区别 const int* p; 和 volatile int* q; 在前一种情况下:p是指向int的指针,而指针点不能由程序员改变,而q是指向int的指针,并且指针点可以由编程器以外的人改变,因此编译器没有关于这个指针的假设. 所以: int *const p = (int*)malloc(sizeof(int)); int *volatile q = (int*)malloc(sizeof(int)); *p = 17; // legal; p = (int*)malloc(sizoef(int)); // not legal *q = 17; // legal; q = (int*)malloc(sizeof(int)); // legal 在后一种情况下:p是指向int的指针,指向哪个p不能被程序员改变,q指向的指针可以由程序员以外的人改变,所以编译器不会对该数据做任何假设. int i = 17; int j = 34; const int *p = &i; volatile int *q = &i; *p = 51; // not legal p = &j; // legal *q = 51; // legal q = &j; // legal (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java实现YH家算法
- java – 匕首2麻烦@注入FirebaseMessagingService
- 如果Java中的反思减慢了订单的执行速度,为什么这么多框架会
- Sequelize 常用操作详解及实例代码
- java – 为什么Thread类中的setName分配给一个字符数组?为
- httpclient 请求http数据,json转map的实例
- Java Spring Controller 获取请求参数的几种方法详解
- Java删除文件、目录及目录下所有文件的方法实例
- java – JAX-WS总是内联发送MTOM附件
- java.lang.reflect.Method.equals(Object obj)中的名称比较