次の 2 行のコードを検討してください。
const char *ptr = "Hello";
char arr[] = "Hello";
ポインター定義の場合、"Hello"
文字列リテラルは本質的に不変ですが、ptr
変数自体は変更され、別のアドレスを保持できます。
配列定義の場合、"Hello"
文字列リテラルは配列の場所にコピーされますが、別の場所を指すarr
ことはできません。ただし、配列が保持する文字列は可変であるため、変更できます。
次に、次の 2 行のコードについて考えてみましょう。
const char * const ptr = "Hello";
const char arr[] = "Hello";
ここでは、両方の文字列が修飾子の結果として不変になっていますが、もっと興味深いのは、定数ポインターとして定義されているため、別のアドレスを指すことはできないということです。const char
ptr
これらの 2 行のコードは同じ動作になりますか? 最終結果が同じである場合、実装に理論的な違いはありますか?配列?