私はconstとして宣言していますが、私の質問はなぜ変数の値を変更するのですか?申し訳ありませんが、これは簡単な質問です。Constはconstではありませんか?
const int a = 8;
int* ptr = &a;
printf("variable: %d \n", a);
printf("pointer: %d \n", *ptr);
*ptr = 1;
printf("pointer: %d \n", *ptr);
printf("variable: %d \n", a);
は、出力:8 8 1 1
おかげで、良い一日を!
だから、あなたは**あなたが契約を破る**あなた**保証されている場合、コードが暴動する理由を尋ねる?しかし、あなたのコンパイラは警告していたはずです。注:Cには_enum-constants_以外の記号定数はありません。 – Olaf
一般に、C言語標準では 'ポインタをconstに'から 'ポインタを非constに'キャストすることができるため、実行時のプログラムの正確な動作は未定義です。具体的には、このプログラムの実行時の動作はコンパイラに依存します。コンパイラが実行可能イメージの読み取り専用セグメントにconst変数を割り当てると、 '* ptr = 1'行が実行されるとメモリアクセス違反(別名*セグメンテーションフォールト*)が発生します。実行可能イメージの読み取り/書き込みセグメントにそれらを割り当てると、この行は正常に実行されます。 –