-2

我有这段代码..

#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

4

2 回答 2

5

为什么当我尝试为常量指针分配新值时它会显示错误

如果你试图修改它指向的值,你会得到一个错误(因为你已经声明它是一个指向常量值的指针);修改指针很好,因为指针本身不是常量。

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

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

你没有增加价值。那将是

(*rptr)++;

而你的代码相当于

*(rptr++);

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

于 2015-02-03T18:30:53.343 回答
1

您没有在此处增加值.. 检查运算符优先级表:此处

于 2015-03-09T12:50:54.920 回答