【发布时间】:2013-01-13 02:37:28
【问题描述】:
我无法理解以下代码:
const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"}
我不明白数组套装中存储了什么,它们是指针吗?如果是这样,字符串存储在哪里?
还有,是指针常量,还是数组常量?
我将不胜感激此代码的完整详细说明,以及内存中发生了什么!
提前致谢。
【问题讨论】:
标签: c arrays pointers constants
我无法理解以下代码:
const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"}
我不明白数组套装中存储了什么,它们是指针吗?如果是这样,字符串存储在哪里?
还有,是指针常量,还是数组常量?
我将不胜感激此代码的完整详细说明,以及内存中发生了什么!
提前致谢。
【问题讨论】:
标签: c arrays pointers constants
我们通过使用cdecl.org 学到了很多东西。这就是它告诉我们的关于suit:
将 suit 声明为指向 const char 的指针的数组 4
所以:
char(在这种情况下,每个字符串的第一个字符)。const,数组也不是。字符串是文字;它们的存储位置是特定于实现的。
在 ASCII 艺术中:
"Clubs"
^
| "Spades"
| ^
| |
+---+---+---+---+
suit | | | | |
+---+---+---+---+
| |
| v
| "Diamonds"
v
"Hearts"
注意suit 本身不是指针;它是数组的名称。
【讨论】:
const char * 是字符串类型,因为字符串只是字符数组。这意味着您有一个const char *(字符串)数组。字符串本身是常量,编译时存储在文件二进制文件的 .data 部分中。因此指针指向的数据是常量。
【讨论】: