这个char数组如何存储四个单独的字符串?

时间:2012-09-17 17:43:00

标签: c string pointers char

我对我正在阅读的书中的这个片段感到困惑。文本字符串放入char数组中。有四个单词,数组中有四个元素。等等,但这意味着单个char元素包含整个文本字符串。我确定chars只能处理一个字符。这是代码。

const char *words[4] = { "aardvark", "abacus", 
    "allude", "zygote" };

那是什么给出的?作者如何使用chars存储整个字符串?我知道解决方案必须非常明显,但我无法看到它。另外,const关键字的含义是什么?为什么只有在我们计划对这个数组做的所有事情都使用strlen()计算每个单词的长度时才需要读取它?

3 个答案:

答案 0 :(得分:7)

代码不使用字符来存储字符串,请注意声明是 char *数组。

char可以包含单个字符,char *可以用于指向字符数组的第一个元素,它可以包含标准C字符串。这是一个重要的C基础:看一个char *,你应该立即想到以null结尾的C字符串。

同样,通过在数组中保存 first int *的地址,可以使用int来引用整个int数组。 int*的订阅方式与使用[]声明的数组相同。

char *也可以用来简单地保存单个字符的地址 - 即不是空终止字符串中的第一个字符。

答案 1 :(得分:3)

  

作者如何使用字符存储整个字符串?

他不能。 You notice the asterisk, right?

答案 2 :(得分:3)

您遗漏的是*

char letter = 'a';  //stores a single character
char *word = "bigger"; //stores a string literal

这意味着这个词真的是:

word ---> [b][i][g][g][e][r][\0]

指向一堆字符(或字符串“字符串”)。在您的示例中,作者定义了:

const char *words[4] = { "aardvark", "abacus",      "allude", "zygote" }; 

所以你有4个字符串,它们是常量。 const是作者选择在那里添加它...它可能已被取消。这只是一个安全措施,是对编译器(和作者)的一个注意事项,即这些值无法修改。