我對恆指針的奇怪行爲,一些問題在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'賦值失敗嗎?爲什麼不?爲什麼你會期望它失敗,只是因爲你添加了另一個*無關的變量?在第二個例子中,你做了與第一個相反的事情。 –