C++ - 指针数组,为什么要这样声明?
C++ - Arrays of Pointers, why is it declared this way?
不确定标题的措辞,但希望它准确一些。
我从一本书中找到这段代码,我很困惑为什么这样声明它(对 C++ 来说是新的)以及它的实际含义,因为这本书没有很好地解释它,让我更加困惑:
const char * const suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};
我不明白 2 个 const 声明的用法以及一个字符串数组实际上是一个字符数组。所以如果这些是 c-strings,它们的长度不应该是 4 吗?或者因为它们是指针,这是否意味着它指向每个字符串的第一个字符?
只需要有人给我解释一下是怎么回事,谢谢!
const char * const suit[4]
这表示 suit
是 4 const pointer
到 const char
的数组。
字符串文字是只读内存中的数组(意味着该数组中的 char
s 本质上是不可变的)。我们通常用指向第一个字符的指针来表示 C 风格的字符串。对于文字,其中 char
是 const
,此指针的类型为 const char*
.
如果你想要一个包含 4 个不可变 C 风格字符串的数组,你可以这样声明:
const char* arr[4];
这个数组的每个元素都是一个指针,可以指向C风格字符串的第一个字符。如果您不需要自己更改数组中的指针,那么您也可以将指针声明为 const
:
const char* const arr[4];
所以要明确一点,这里的 4 是我们指向的 C 风格字符串的数量。在你的例子中,一副纸牌中的 4 种花色中的每一种都有一个字符串。
how an array of strings is actually an array of characters.
不是。 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 | * | * | * | * |
+---+---+---+---+
I do not understand the use of 2 const declarations
第一个const
表示字符不会改变,第二个表示指针不会改变
不确定标题的措辞,但希望它准确一些。
我从一本书中找到这段代码,我很困惑为什么这样声明它(对 C++ 来说是新的)以及它的实际含义,因为这本书没有很好地解释它,让我更加困惑:
const char * const suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};
我不明白 2 个 const 声明的用法以及一个字符串数组实际上是一个字符数组。所以如果这些是 c-strings,它们的长度不应该是 4 吗?或者因为它们是指针,这是否意味着它指向每个字符串的第一个字符?
只需要有人给我解释一下是怎么回事,谢谢!
const char * const suit[4]
这表示 suit
是 4 const pointer
到 const char
的数组。
字符串文字是只读内存中的数组(意味着该数组中的 char
s 本质上是不可变的)。我们通常用指向第一个字符的指针来表示 C 风格的字符串。对于文字,其中 char
是 const
,此指针的类型为 const char*
.
如果你想要一个包含 4 个不可变 C 风格字符串的数组,你可以这样声明:
const char* arr[4];
这个数组的每个元素都是一个指针,可以指向C风格字符串的第一个字符。如果您不需要自己更改数组中的指针,那么您也可以将指针声明为 const
:
const char* const arr[4];
所以要明确一点,这里的 4 是我们指向的 C 风格字符串的数量。在你的例子中,一副纸牌中的 4 种花色中的每一种都有一个字符串。
how an array of strings is actually an array of characters.
不是。 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 | * | * | * | * |
+---+---+---+---+
I do not understand the use of 2 const declarations
第一个const
表示字符不会改变,第二个表示指针不会改变