0

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

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

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

4

3 回答 3

7

该代码不使用字符来存储字符串,请注意声明是一个 char *.

Achar可以保存单个字符,achar *可以用于指向字符数组的第一个元素,该数组可以保存标准 C 字符串。这是一个重要的 C 基础知识:看到 a char *,您应该立即想到以 null 结尾的 C 字符串。

类似地,通过保存数组中第一个的地址,int *可以使用 an 来引用 的整个数组。可以像使用声明的数组一样下标。int intint*[]

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

于 2012-09-17T17:44:31.997 回答
3

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

他不能。你注意到星号,对吧?

于 2012-09-17T17:45:02.970 回答
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 是作者选择在其中添加它的选择......它可以被忽略。这只是一种保护措施,是对编译器(和作者)的说明,这些值不会被修改。

于 2012-09-17T17:50:05.330 回答