1

次のコードを理解できません。

    const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"}

配列スーツに何が格納されているのかわかりません。それらはポインターですか? もしそうなら、文字列はどこに保存されていますか?

また、ポインタ定数ですか、それとも配列定数ですか?

このコードの完全な詳細な説明と、メモリ内で何が起こっているかを教えていただければ幸いです。

前もって感謝します。

4

2 に答える 2

2

cdecl.orgを使用して多くのことを学びます。これが私たちに伝えていることですsuit

const char へのポインタの配列 4 としてスーツを宣言します

そう:

  • 配列には 4 つのポインターが含まれます。
  • 各ポインターはchar(この場合、各文字列の最初の文字) を指します。
  • ポインタはそうではなくconst、配列もそうではありません。

文字列はリテラルです。それらが格納される場所は実装固有です。

アスキー アートでは:

              "Clubs"
               ^
               |  "Spades"
               |   ^
               |   |
     +---+---+---+---+
suit |   |   |   |   |
     +---+---+---+---+
       |   |
       |   v
       |  "Diamonds"
       v
      "Hearts"

suitそれ自体はポインターではないことに注意してください。それは配列の名前です。

于 2013-01-13T02:41:24.623 に答える
1

const char *文字列は単なる文字の配列であるため、文字列型です。これは、const char *(文字列) の配列があることを意味します。文字列自体は定数であり、コンパイル時にファイル バイナリの .data セクションに格納されます。したがって、ポインターが指すデータは一定です。

于 2013-01-13T02:39:17.760 に答える