以下の2つのケースを考慮してください。 ケース1:コンパイラエラー - >エラー:読み取り専用Constant intcecement
#include<stdio.h>
main()
{
const int x=5;
printf("%d",++x);
}
「X」変数をケース2の増分は:出力6.なぜで正常に実行されましたか?
#include<stdio.h>
main()
{
const int x=5;
int *ptr=&x;
++(*ptr);
printf("%d",x);
}
2つ目は*未定義の動作*につながります。定数 'int'を変更するには、定数でない' int'へのポインタを使います。良いコンパイラは警告を出し、そうでなければより多くの警告を発するべきです。 –
警告:初期化はポインタのターゲット型からの修飾子を破棄します –
したがって、case2はint型* ptr =&xでなければなりません。 –