c++ - char* p="123"这句代码为什么是对的?
迷茫
迷茫 2017-04-17 15:18:09
0
7
991

如题,C风格字符串,"123"不是const char *类型的常量么?为什么赋给一个普通指针是可以的呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(7)
伊谢尔伦

これを実行してもエラーは報告されませんが、p が指す文字列 123 を変更しようとすると、メモリ アクセス違反が発生します。 「123」は文字列定数であるため、読み取り専用の記憶領域に保存されます。 const char* が必須の理由は、プログラマーが誤って 123 を変更するのを防ぐためです。

いいねを押す +0
PHPzhong

初心者向けの回答
「123」は const char 型のオブジェクトです。 const char * p は右から左に読む必要があります。これは、p がポインターであり、指すオブジェクトが const char 型であることを意味します。これは正しくありません。 同様に、p が指すオブジェクトが const char である限り、最後に p = "456"; を追加しても問題ありません。

いいねを押す +0
PHPzhong

char *p = "123"; は文字配列を表しますか?それは文字列

です
いいねを押す +0
左手右手慢动作

-Wall をコンパイルして追加すると、警告が表示されます。

リーリー
いいねを押す +0
大家讲道理

char *p = "123"; 実際には、定数領域に文字列領域を確保し、文字ポインタ p を宣言し、文字列が配置されているメモリ領域を指す 2 つの処理になります。すぐに修正してください

いいねを押す +0
巴扎黑

C 言語が残した落とし穴

いいねを押す +0
左手右手慢动作

これは c との互換性のために残されています

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート