我对恒指针的奇怪行为,一些问题在C.怪异的行为
1.
int x = 1;
const int *ptr = &x;
x = 2;
printf("%d %d",*ptr, x);
由于指针ptr指向const int的,我期待一个错误在第三行。 (因为“1”已经被保存在指针PTR和在指针值不能改变,因为我已经加入“常量”!)
2.
double rates[3] = {0.1,0.2,0.3};
const double *ptr = rates;
ptr[2] = 99.99;
从第二行中,PTR是费率地址[0]。由于只有* ptr = rates [0]是const double的,所以我期望从第三行发生错误!
为什么会发生这种情况?
您不能从ptr更改x的值,但可以将其从x更改为x。 x不是常量。你的指针的值永远不会改变。您的指针*指向的值已更改。公寓的地址没有变化。谁住在那间公寓里。 –
在第一个例子中,如果你没有'ptr'你会期望'x = 2'赋值失败吗?为什么不?为什么你会期望它失败,只是因为你添加了另一个*无关的变量?在第二个例子中,你做了与第一个相反的事情。 –