考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > C语言程序设计 > C语言辅导 > 文章内容
  

全国计算机等级考试二级C语言入门教程(66)

中华IT学院   【 】  [ 2016年1月23日 ]

字符数组

用来存放字符量的数组称为字符数组。 字符数组类型说明的形式与前面介绍的数值数组相同。例如:char c[10];
由于字符型和整型通用,也可以定义为int c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二
维或多维数组,例如:char c[5][10];即为二维字符数组。 字符数组也允许在类型说明时作初始化赋值。例如:static
char c[10]={`c`,` `,`p`,`r`,o`,g`,r`,`a`,`m`};赋值后各元素的值为: 数组C c[0]c[1]c[2]c[3]c[4]c
[5]c[6]c[7]c[8]c[9]其中c[9]未赋值,由系统自动赋予 0值。 当对全体元素赋初值时也可以省去长度说明。例如:
static char c[]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`};这时C数组的长度自动定为9。

main()
{
int i,j;
char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};
for(i=0;i<=1;i++)
{
for(j=0;j<=4;j++)
printf("%c",a[i][j]);
printf("\n");
}
}


本例的二维字符数组由于在初始化时全部元素都赋以初值, 因此一维下标的长度可以不加以说明。字符串在C语
言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。在 2.1.4节介绍字符串常量时,已说明字符串
总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时, 也把结束符'\0'存入数组,并以此作为该字符串
是否结束的标志。 有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

C语言允许用字符串的方式对数组作初始化赋值。例如:
static char c[]={'c', ' ','p','r','o','g','r','a','m'}; 可写为:
static char c[]={"C program"}; 或去掉{}写为:
sratic char c[]="C program";

用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。上面的数组 c在内存中的
实际存放情况为: C program\0`\0'是由C编译系统自动加上的。由于采用了`\0'标志,所以在用字符串赋初值时一
般无须指定数组的长度, 而由系统自行处理。在采用字符串方式后,字符数组的输入输出将变得简单方便。 除了上
述用字符串赋初值的办法外,还可用 printf函数和 scanf函数一次性输出输入一个字符数组中的字符串, 而不必使
用循环语句逐个地输入输出每个字符。

void main()
{


static char c[]="BASIC\ndBASE";
printf("%s\n",c);
} printf("%s\n",c);


注意在本例的 printf函数中,使用的格式字符串为“%s”,表示输出的是一个字符串。而在输出表列中给出数组名
则可。 不能写为: printf("%s",c[]);


void main()
{
char st[15];
printf("input string:\n");
scanf("%s",st);
printf("%s\n",st);
} char st[15];


本例中由于定义数组长度为15, 因此输入的字符串长度必须小于15,以留出一个字节用于存放字符串结束标志
`\0`。应该说明的是,对一个字符数组,如果不作初始化赋值,则必须说明数组长度。还应该特别注意的是,当用
scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。例如运行例4.8,当输入的字符串
中含有空格时,运行情况为: input string:this is a book this 从输出结果可以看出空格以后的字符都未能输出。
为了避免这种情况, 可多设几个字符数组分段存放含空格的串。程序可改写如下:

Lesson
void main()
{
char st1[6],st2[6],st3[6],st4[6];
printf("input string:\n");
scanf("%s%s%s%s",st1,st2,st3,st4);
printf("%s %s %s %s\n",st1,st2,st3,st4);
}


本程序分别设了四个数组, 输入的一行字符的空格分段分别装入四个数组。然后分别输出这四个数组中的字符串。
在前面介绍过,scanf的各输入项必须以地址方式出现,如 &a,&b等。但在例4.8中却是以数组名方式出现的,这是
为什么呢?这是由于在C语言中规定,数组名就代表了该数组的首地址。 整个数组是以首地址开头的一块连续的内存
单元。如有字符数组 char c[10],在内存可表示如图4.2。设数组 c的首地址为 2000,也就是说 c[0]单元地址为2000。
则数组名 c就代表这个首地址。因此在 c前面不能再加地址运算符&。如写作scanf("%s",&c);则是错误的。 在执行
函数printf("%s",c) 时,按数组名 c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志'\0'为止。

分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2006-2017 中华考试网(Examw.com) All Rights Reserved  营业执照