0186774ワット発電中さん
2018/02/11(日) 19:45:40.60ID:9AI+ikPr> 外部変数を変更しないと宣言したのと同じことなんじゃ?
同じじゃないんだ。
void func(const int *x) {}
と書くと、関数func()内で外部変数を変更しないと宣言した以外に、
*xの指す外部変数はconst宣言されている変数だ。
と言う、余分な事も宣言してしまうんだよ。
その結果、
int ivar;
void func(const int *x) {}
void fun2c2(void) {
func(&var);
}
こういうプログラムは、func()の呼び出しで、
引数の型が違うと怒られてしまう。
なぜなら、varがconst intではないからだ。
もともとの質問者の状況はこの状況に近い。
怒られないためには、やりたくはないけど、
void fun2c2(void) {
func((const int *)&var);
}
というキャストが必要。