如题,C风格字符串,"123"不是const char *类型的常量么?为什么赋给一个普通指针是可以的呢?
业精于勤,荒于嬉;行成于思,毁于随。
これを実行してもエラーは報告されませんが、p が指す文字列 123 を変更しようとすると、メモリ アクセス違反が発生します。 「123」は文字列定数であるため、読み取り専用の記憶領域に保存されます。 const char* が必須の理由は、プログラマーが誤って 123 を変更するのを防ぐためです。
123
const char*
初心者向けの回答「123」は const char 型のオブジェクトです。 const char * p は右から左に読む必要があります。これは、p がポインターであり、指すオブジェクトが const char 型であることを意味します。これは正しくありません。 同様に、p が指すオブジェクトが const char である限り、最後に p = "456"; を追加しても問題ありません。
char *p = "123"; は文字配列を表しますか?それは文字列
char *p = "123";
-Wall をコンパイルして追加すると、警告が表示されます。
-Wall
char *p = "123"; 実際には、定数領域に文字列領域を確保し、文字ポインタ p を宣言し、文字列が配置されているメモリ領域を指す 2 つの処理になります。すぐに修正してください
C 言語が残した落とし穴
これは c との互換性のために残されています
これを実行してもエラーは報告されませんが、p が指す文字列
123
を変更しようとすると、メモリ アクセス違反が発生します。 「123」は文字列定数であるため、読み取り専用の記憶領域に保存されます。const char*
が必須の理由は、プログラマーが誤って123
を変更するのを防ぐためです。初心者向けの回答
「123」は const char 型のオブジェクトです。 const char * p は右から左に読む必要があります。これは、p がポインターであり、指すオブジェクトが const char 型であることを意味します。これは正しくありません。 同様に、p が指すオブジェクトが const char である限り、最後に p = "456"; を追加しても問題ありません。
ですchar *p = "123";
は文字配列を表しますか?それは文字列
リーリー-Wall
をコンパイルして追加すると、警告が表示されます。char *p = "123"; 実際には、定数領域に文字列領域を確保し、文字ポインタ p を宣言し、文字列が配置されているメモリ領域を指す 2 つの処理になります。すぐに修正してください
C 言語が残した落とし穴
これは c との互換性のために残されています