この割り当てが可能な理由を教えてください。
char const *c = "Hello";
c = "there!";
内容を変更できない場所を指していませんか。私が理解できる限り、それは別のオブジェクトを作成し、 c がそれを指すようにしています。本当ですか。
これに関する他のハイライトをいただければ幸いです。
はい、const
その左側にあるものすべてに適用されます (左側に何もない場合を除く)。
c
別の文字列を指しているだけです。
宣言を正しく解釈するには、右から左に読み取ります:c
は定数へのポインタchar
です。
char const *c = "Hello";
定数へのポインタです。つまり、そのポインターが指すコンテンツは変更できませんが、ポインターは変更して別のメモリ位置を指すことができます。
注 「Hello」は文字列リテラルです。が与えられていても、char *c = "Hello";
コンテンツを変更しようとすることは未定義の動作です。すなわちc[0] = 'x'
。