不确定如何说出标题,但希望它有些准确。
我从一本书中找到了这个代码,我很困惑为什么它以这种方式声明(对C ++来说是新手)以及它实际意味着什么,因为这本书没有很好地解释它并让我更加困惑:
const char * const suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};
我不明白使用2个const声明以及字符串数组实际上是一个字符数组。所以,如果这些是c字符串,它们的长度不应该是4吗?或者因为它们是指针,这是否意味着它指向每个字符串的第一个字符?
只需要一个人向我解释发生了什么,谢谢!
答案 0 :(得分: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 | * | * | * | * |
+---+---+---+---+
我不明白使用2个const声明
第一个const
表示字符不会改变,第二个表示指针不会改变。
答案 1 :(得分:2)
字符串文字是只读内存中的数组(意味着该数组中的char
本质上是不可变的)。我们通常使用指向其第一个字符的指针来表示C风格的字符串。对于char
为const
的文字,此指针的类型为const char*
。
如果你想要一个包含4个不可变C风格字符串的数组,你可以声明如下:
const char* arr[4];
此数组的每个元素都是一个指针,您可以指向C样式字符串中的第一个字符。如果您不需要自己更改数组中的指针,那么您也可以将指针声明为const
:
const char* const arr[4];
所以要清楚,这里的4是我们指向的C风格字符串的数量。在你的情况下,你在一副牌中的4件套装中都有一个字符串。
答案 2 :(得分:0)
const char * const suit[4]
这表示suit
是4 const pointer
到const char
的数组。