指向常量指向正常变量的指针

时间:2014-11-26 00:46:38

标签: c++ c pointers c++11

char var = 'a';
const char *ptr;
ptr = &var;
*ptr = 'b'; //(i understand this is wrong)
var = 'b'; // (why is this wrong)

我无法改变“var”的值。这是否意味着我已将“var”的声明从char更改为const char,方法是将其指定给此指针(指向常量的指针)。所以规则不应该是指向常量的指针应该只有常量变量的地址。 提前谢谢。

2 个答案:

答案 0 :(得分:4)

  

我无法更改“var”的值。

是的,你可以。您是在最终声明var = 'b';

中完成的
  

这是否意味着我已将“var”的声明从char更改为const char

没有。 var始终是并且永远都是可变的char

  

因此规则不应该是指向常量的指针应该只有常量变量的地址。

没有。指向const的唯一特殊之处在于,您无法通过此特定指针更改指向对象。只要对象本身是可变的,完全有可能以其他方式更改对象,就像你自己展示一样。


这是了解正在发生的事情的另一种方式:

  1. 存在一个可变char的对象。
  2. 当您评估id-expression var时,您将获得一个类型为char的可修改左值,用于指定该对象。通俗地说,你可以说“该对象的名称为”var“。
  3. 当您评估表达式*ptr时,您将获得const char类型的(不可修改的)左值,它也指定我们在(1)中提到的相同对象。
  4. 通常有很多方法可以指定同一个对象,也就是说,有很多方法可以将对象称为某种表达式的。有时这些值是可变的,有时它们是不可变的。 (只有当对象本身是const时才允许通过可变值修改它;但是通常很难获得指定常量对象的可变值 - 你需要像{{1}这样的东西},或者在C中丢弃限定符。)

答案 1 :(得分:1)

这条线没有错:

var = 'b'; // (why is this wrong)

您的编译器是否抱怨过它?我的没有。