首页 > 编程笔记 > C语言笔记 阅读:20

C语言字符数组的用法(非常详细,附带实例)

C语言中的字符数组本质是存储字符的数组,这种数组中的每个元素都可以存放一个字符。

我们知道,字符串就是由两个或两个以上的字符组成的,在 C 语言中通常使用一个字符数组来存放一个字符串。实际上,字符数组就是一系列的字符集合,在某种程度上可以说就相当于字符串。

字符数组的定义和使用方法与其他基本类型的数组相似。例如定义一个字符数组 iArray[6],按照下图所示的初始化形式定义,将会在控制台上输出“MingRi”。


图 1 定义一个字符数组iArray[6]

C语言字符数组的定义

字符数组的定义与其他数据类型的数组的定义类似,一般形式如下:
char 数组标识符[常量表达式]
因为要定义的是字符型数据,所以在数组标识符前所用的是 char,后面括号中表示的是数组元素的数量。

例如,定义字符数组 cArray,代码如下:
char cArray[4];
其中,cArray 表示数组标识符,4 表示数组中包含 4 个字符型的元素。

字符数组的引用与其他类型数组的引用一样,也是使用索引的形式。例如,引用定义的数组 cArray[4]中的元素,代码如下:
cArray[0]='L';
cArray[1]='o';
cArray[2]='v';
cArray[3]='e';
上面的代码表示依次引用数组中的元素并为其赋值。

C 语言中并不存在字符串数据类型,只存在字符数据类型,如果想存放字符串,就需要字符数组,多个字符组合在一起构成字符串。

C语言字符数组的初始化

对字符数组进行初始化操作有以下几种方法。

1) 逐个字符赋给数组中的各元素

这是很容易理解的初始化字符数组的方法。例如,初始化一个字符数组,代码如下:
char cArray[4]={'L','o','v','e'};
上述代码定义包含 4 个元素的字符数组,花括号中的每一个字符对应赋值一个数组元素,使用字符数组输出一个字符串。

2) 在定义字符数组时进行初始化(可省略数组长度)

如果初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数来确定数组长度。

例如,初始化字符数组的代码可以写成如下形式:
char cArray[]={'L','o','v','e'};
可见,代码中定义的 cArray[] 中没有给出数组的长度,但是根据初值的个数可以确定数组的长度为 4。

3) 利用字符串给字符数组赋初值

通常用一个字符数组来存放一个字符串。例如,用字符串对数组进行初始化,代码如下:
char cArray[]={"Love"};
或者将“{}”去掉,写成如下形式:
char cArray[]="Love";

C语言字符串的结束标志'\0'

在 C语言中,使用字符数组保存字符串,也就是使用一个一维数组保存字符串中的每一个字符,此时系统会自动为其添加“\0”作为结束标志。

例如,初始化一个字符数组,代码如下:
char cArray[]={'L','o','v','e','\0'};
通常字符串会以“\0”作为结束标志,当把一个字符串存入一个数组时,也就是把结束标志“\0”存入数组,并将此作为该字符串是否结束的标志。

有了“\0”后,字符数组的长度就不那么重要了。当然在定义字符数组时应估计字符串的实际长度,保证数组长度始终大于字符串实际长度。如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串的长度。

用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志“\0”。上面的字符数组 cArray 在内存中的实际存放情况如下图所示。


图 2 cArray在内存中的实际存放情况

字符数组并不要求最后一个字符为“\0”,甚至可以不包含“\0”。例如,下面的写法也是合法的。
char cArray[4]={'L','o','v','e'};
是否加“\0”,完全由开发人员的需求决定。

C语言字符数组的输入和输出

字符数组的输入和输出有以下两种方法。

首先,可以使用格式字符“%c”实现字符数组中字符的逐个输入或输出。例如,循环输出字符数组中的元素,代码如下:
for(i=0;i<5;i++) /*进行循环*/
{
    printf("%c",cArray[i]); /*输出字符数组中的元素*/
}
变量 i 为循环的控制变量,并且在循环中作为数组的索引来实现循环输出。

其次,可以使用格式字符“%s”将整个字符串依次输入或输出。例如,输出一个字符串,代码如下:
char cArray[]="GoodDay!"; /*初始化字符数组*/
printf("%s",cArray); /*输出字符串*/
使用格式字符“%s”将字符串进行输出需注意以下几种情况。
可能有的读者会有疑惑,字符串是存放在字符数组中的吗?字符串除了可以存放在字符数组中,还有其它的存放方式,比如:
char *p;
p = malloc(80 * sizeof(char)); // 分配内存大小
strcpy(p, "https://c.biancheng.net");
puts(p);
程序中,"https://c.biancheng.net" 是一个字符串,但它并不是存放在某个字符数组中的。

相关文章