加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

const和volatile指针之间有什么区别?

发布时间:2020-12-14 16:29:17 所属栏目: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读