关于数组和指针的存储

时间:2013-01-13 02:37:28

标签: c arrays pointers const

我无法理解以下代码:

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

我不明白数组套装中存储的是什么,它们是指针吗?如果是这样,字符串存储在哪里?

此外,指针是常量还是数组常量?

我将非常感谢对此代码的完整详细说明,以及内存中发生的事情!

提前致谢。

2 个答案:

答案 0 :(得分:2)

我们通过使用cdecl.org了解了很多。这就是它告诉我们的suit

  

将suit声明为指向const char

的指针的数组4

所以:

  • 数组包含4个指针。
  • 每个指针指向char(在这种情况下,每个字符串的第一个字符)。
  • 指针不是const,也不是数组。

字符串是文字;它们存储的位置是特定于实现的。

在ASCII艺术中:

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

请注意,suit本身不是指针;它是数组的名称。

答案 1 :(得分:1)

const char *是一个字符串类型,因为字符串只是字符数组。这意味着您有一个const char *(字符串)数组。字符串本身是常量,在编译时存储在文件二进制文件的.data部分中。因此,指针指向的数据是常量。