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,方法是将其指定给此指针(指向常量的指针)。所以规则不应该是指向常量的指针应该只有常量变量的地址。 提前谢谢。
答案 0 :(得分:4)
我无法更改“var”的值。
是的,你可以。您是在最终声明var = 'b';
这是否意味着我已将“var”的声明从
char
更改为const char
没有。 var
始终是并且永远都是可变的char
。
因此规则不应该是指向常量的指针应该只有常量变量的地址。
没有。指向const的唯一特殊之处在于,您无法通过此特定指针更改指向对象。只要对象本身是可变的,完全有可能以其他方式更改对象,就像你自己展示一样。
这是了解正在发生的事情的另一种方式:
char
的对象。var
时,您将获得一个类型为char
的可修改左值,用于指定该对象。通俗地说,你可以说“该对象的名称为”var
“。*ptr
时,您将获得const char
类型的(不可修改的)左值,它也指定我们在(1)中提到的相同对象。通常有很多方法可以指定同一个对象,也就是说,有很多方法可以将对象称为某种表达式的值。有时这些值是可变的,有时它们是不可变的。 (只有当对象本身是const时才允许通过可变值修改它;但是通常很难获得指定常量对象的可变值 - 你需要像{{1}这样的东西},或者在C中丢弃限定符。)
答案 1 :(得分:1)
这条线没有错:
var = 'b'; // (why is this wrong)
您的编译器是否抱怨过它?我的没有。