为什么以下程序没有给出错误?

时间:2015-04-23 09:22:28

标签: c const

#include<stdio.h>
void main ()
{
     int a=4;
     const int *p=&a; 
     *p--;      
}

在上面的行中,它意味着我们不能通过p更改值a,因此在递减语句中它应该给出错误,但它不会给出错误。谁能解释为什么?

2 个答案:

答案 0 :(得分:4)

p递减p而不是(*p)--的内容。

如果执行error: decrement of read-only location ‘*p’ ,则会出现编译错误

ticket

答案 1 :(得分:2)

您可能会发现运营商发生错误的订单。后缀减少比解除引用更高operator precedence。所以你得到了:

*(p--);

由于const指针指向的值未被修改,因此不会产生错误。它是未定义的行为,但是由于您要取消引用无效指针,所以可能发生任何事情。