递增 const 指针
incrementing a const pointer
我有这段代码..
#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
Why does it show me errors when I try to assign a new value to the constant pointer
如果您尝试修改它指向的值(因为您已声明它是一个指向常量值的指针),您将得到一个错误;修改指针没问题,因为指针本身不是常量。
*rptr=3; // error - attempt to modify constant value
rptr = new int (6); // OK - modifies non-const pointer
but doesn't when I try to increment the value.
您没有增加该值。那将是
(*rptr)++;
而您的代码等同于
*(rptr++);
这会增加指针,并取消引用其旧值,但会忽略取消引用的值。在增加它之后再次取消引用它,就像你稍后所做的那样,会产生未定义的行为 - 你碰巧看到一个垃圾值,它是下一个内存位置中发生的任何事情,但原则上任何事情都可能发生。
你不是在增加这里的值..
检查运算符优先级 Table:here
我有这段代码..
#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
Why does it show me errors when I try to assign a new value to the constant pointer
如果您尝试修改它指向的值(因为您已声明它是一个指向常量值的指针),您将得到一个错误;修改指针没问题,因为指针本身不是常量。
*rptr=3; // error - attempt to modify constant value
rptr = new int (6); // OK - modifies non-const pointer
but doesn't when I try to increment the value.
您没有增加该值。那将是
(*rptr)++;
而您的代码等同于
*(rptr++);
这会增加指针,并取消引用其旧值,但会忽略取消引用的值。在增加它之后再次取消引用它,就像你稍后所做的那样,会产生未定义的行为 - 你碰巧看到一个垃圾值,它是下一个内存位置中发生的任何事情,但原则上任何事情都可能发生。
你不是在增加这里的值.. 检查运算符优先级 Table:here