const
あなたの答えは、私が今日気づいたことについての私の理解におけるこの大きな欠落を解消するために非常に求められています.
私のプログラムでは、ステートメントを使用しましたが、変数iconst int *ptr=&i;
に修飾子を使用していません。const
1)を使用してiの値を変更しようとすると、変数iを修飾子で宣言していないにもかかわらず、エラーが発生します。ptr
const int *ptr=&i;
assignment of read-only location '*ptr'|
const
const int *ptr=&i;
int * const ptr=&i;
これは、ポインターがconst int *ptr=&i;
定数のアドレスを格納することをint * const ptr=&i;
意味しますが、ポインター自体は定数であり、変更できないことを意味します.しかし、今日、あるユーザーがディスカッション( LINK )で私に言いましたconst int *ptr means the memory pointed to must be treated as nonmodifiable _through this pointer_
。これは、「一部の選択ポインターは値を変更できない (他の人は変更できる)」ことを意味するためです。私はそのような選択的宣言に気づいていませんでした!!これをより明確に、より詳細に、より厳密な方法で述べてください。平均?
2)また、非定数のアドレスをポインタに代入することで、ステートメント内のプログラムに嘘をつくことができるとも言われconst int *ptr=&i;
ました.これはどういう意味ですか?なぜそれが許されているのですか?なぜ警告が出ないのですか?定数のアドレスを期待するポインターに非定数のアドレスを割り当てるとptr
?そして、非定数のアドレスが割り当てられることを非常に許容している場合、その非定数の値を変更しようとするとエラーがスローされるのはなぜですか? -constant、指している変数が非定数である場合、どちらが合理的ですか?
#include <stdio.h>
int main ()
{
int i=8;
const int *ptr=&i;
*ptr=9;
printf("%d",*ptr);
}
エラー: assignment of read-only location '*ptr'|