递增一个const指针

时间:2015-02-03 17:52:49

标签: c++ g++ g++4.8

我有这段代码..

#include <iostream>

int main()
{
        int r = 5;
        const int * rptr= &r;
        *rptr++; // undefined value (trash)
        *rptr=3; // error
        std::cout<<*rptr<<" "<<r<<std::endl;
        rptr = new int (6);
        std::cout<<*rptr<<" "<<r<<std::endl;


        return 0;
}

为什么当我尝试将新值分配给指针所指向的常量整数时,它会显示错误,但是当我尝试递增该值时,它不会显示错误。
当我增加*rptr时,它为它分配了一个未定义的值,所以我试图检查两者是否指向同一个地址,并且它们都是。

这里是前一个代码的输出,但没有包含错误的行:

-1079235284 5
6 5

在Linux x86机器上使用g ++ 4.8

2 个答案:

答案 0 :(得分:4)

  

当我尝试为常量指针

分配新值时,为什么会显示错误

如果您尝试修改它指向的值(因为您已将其声明为指向常量值的指针),您将收到错误消息;修改指针很好,因为指针本身不是常量。

*rptr=3;               // error - attempt to modify constant value
rptr = new int (6);    // OK - modifies non-const pointer 
  

但是当我尝试增加值时不会。

你没有增加价值。那将是

(*rptr)++;

,而您的代码等同于

*(rptr++);

使指针递增,并取消引用其旧值,但忽略取消引用的值。在递增之后再次取消引用它,就像稍后一样,给出了未定义的行为 - 你碰巧看到了一个垃圾值,这是在下一个内存位置发生的事情,但原则上任何事情都可能发生。

答案 1 :(得分:1)

你这里没有增加价值.. 检查运算符优先级表:here