答えて
最初のものは、以下を含む(第2の一方はアレイ 6の文字を作成し、そこに文字列リテラルの位置をポインタ変数(プラットフォームによってストレージの4または8バイト)を作成して記憶しますゼロストリングターミネーターバイト)、そのリテラルをそこにコピーします。
リテラルはconst
なので、最初の行でコンパイラの警告が表示されます。
正確に文字列リテラルが格納されていますか?それはヒープですか? – blitzkriegz
文字列リテラルは、通常、スタックと( 'new' /' delete'管理された)ヒープとは別のメモリ領域に格納されます。プラットフォームによっては、この領域がコピープロテクトされている可能性があります。この領域に書き込むと、プログラムがクラッシュします。 –
クリスタルクリアな答えに感謝します。 – blitzkriegz
最初のものはconst(読み取り専用)データへの非constポインタです。第2のものは非const配列です。
char * p1 = "hello"はchar const * p1 = "hello"と同じですか? – blitzkriegz
@Mahatma:はい、これは読みやすく直感的なバージョンの 'const char * p1 =" hello "'と同じです。 –
@Mahatma:はい、最初ですが危険です: 'const'修飾がなければ、文字列リテラルを修正しようとするとコンパイラの保護がなくなり、未定義の動作が起こります。 –
最初のものは(読み取り専用)データをCONSTする非constポインタであるので、第二は、パウロが言ったように、あなたが書くことができ、非const配列である:
p2[2]='A'; //changing third character - okay
しかし、あなたがすることはできません書き込み:
p1[2]='A';//changing third character - runtime error!
- 1. mallocがcharのメモリを割り当てていない*
- 2. C++でchar *にメモリを割り当てる
- 3. C - char型の配列のメモリの割り当て
- 4. sizeof Char /配列の長さCでのメモリ割り当て
- 5. const char *にcharを割り当てる方法*
- 6. Cuda char *変数の割り当て
- 7. const charポインタの割り当て
- 8. char *のメモリを割り当てるときに奇妙な文字*
- 9. C++ - 関数メモリの割り当て解除エラーにより、char *を渡す
- 10. 構造体C++のcharポインタにアクセスしてメモリを割り当てます。
- 11. 構造体を割り当てられたcharメモリ空間にキャストする
- 12. 割り当てメモリ**
- 13. メモリ割り当て
- 14. 割り当てメモリ
- 15. 割り当てられていない場合、intとcharの固定割り当てはありますか?
- 16. char *をC++に割り当てて解放する
- 17. メモリ割り当てとループ
- 18. シャアのメモリ割り当て
- 19. char ** segフォールディングへの値の割り当て
- 20. Char関数内のポインタの割り当て - Segmentaionのエラー
- 21. 文字列リテラルをchar *に割り当てる*
- 22. charへのポインタの配列を再割り当て
- 23. C++でcharにコマンドライン変数を割り当てる方法
- 24. char *への文字割り当ては機能しません
- 25. (CONSTのchar *)を割り当てるポインタ型 - セグメンテーション障害以下
- 26. C/C++ std :: queueへの値割り当て<char*>
- 27. 動的割り当てにcharを使用する
- 28. メモリの割り当て(C)
- 29. タイプ 'char * [80]'からタイプ 'char **'エラーに割り当てるときに互換性のないタイプ
- 30. 「char」に「char」を割り当てると、seg faultが発生するのはなぜですか? C++
最初は 'const char *'です。 – rubenvb
'p1'は、プラットフォームに依存する4または8バイト(メモリアドレスの格納に必要)を要します。 'p2'は6バイト(文字列' hello'では5バイト+ヌル終了文字では1バイト)をとります。 – RBT