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

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。