次のコードを理解できません。
const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"}
配列スーツに何が格納されているのかわかりません。それらはポインターですか? もしそうなら、文字列はどこに保存されていますか?
また、ポインタ定数ですか、それとも配列定数ですか?
このコードの完全な詳細な説明と、メモリ内で何が起こっているかを教えていただければ幸いです。
前もって感謝します。
cdecl.orgを使用して多くのことを学びます。これが私たちに伝えていることですsuit
:
const char へのポインタの配列 4 としてスーツを宣言します
そう:
char
(この場合、各文字列の最初の文字) を指します。const
、配列もそうではありません。文字列はリテラルです。それらが格納される場所は実装固有です。
アスキー アートでは:
"Clubs"
^
| "Spades"
| ^
| |
+---+---+---+---+
suit | | | | |
+---+---+---+---+
| |
| v
| "Diamonds"
v
"Hearts"
suit
それ自体はポインターではないことに注意してください。それは配列の名前です。
const char *
文字列は単なる文字の配列であるため、文字列型です。これは、const char *
(文字列) の配列があることを意味します。文字列自体は定数であり、コンパイル時にファイル バイナリの .data セクションに格納されます。したがって、ポインターが指すデータは一定です。