C++ - 指针数组,为什么这样声明?

May*_*ron -1 c++ arrays pointers declaration

不知道如何写标题,但希望它的一些准确.

我从一本书中找到了这个代码,我很困惑为什么它以这种方式声明(对C++来说是新的)以及它实际意味着什么,因为这本书没有很好地解释它并使我更加困惑:

const char * const suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};
Run Code Online (Sandbox Code Playgroud)

我不明白使用2个const声明以及字符串数组实际上是一个字符数组.所以,如果这些是c字符串,它们的长度不应该是4吗?或者因为它们是指针,这是否意味着它指向每个字符串的第一个字符?

只需要一个人向我解释发生了什么,谢谢!

fre*_*low 5

字符串数组实际上是一个字符数组.

事实并非如此.suit是一个指向字符的指针数组.所以总共有4个指针,每个指针指向相应字符串的第一个字符.

也许一些ASCII艺术会有所帮助?

     +---+---+---+---+---+---+---+
     | H | e | a | r | t | s |NUL|
     +---+---+---+---+---+---+---+
       ^
       | +---+---+---+---+---+---+---+---+---+
       | | D | i | a | m | o | n | d | s |NUL|
       | +---+---+---+---+---+---+---+---+---+
       |   ^
       |   | +---+---+---+---+---+---+
       |   | | C | l | u | b | s |NUL|
       |   | +---+---+---+---+---+---+
       |   |   ^
       |   |   | +---+---+---+---+---+---+---+
       |   |   | | S | p | a | d | e | s |NUL|
       |   |   | +---+---+---+---+---+---+---+
       |   |   |   ^
     +-|-+-|-+-|-+-|-+
suit | * | * | * | * |
     +---+---+---+---+
Run Code Online (Sandbox Code Playgroud)

我不明白使用2个const声明

第一个const意味着字符不会改变,第二个意味着指针不会改变.