专题10 字符数组的定义及引用(讲义)-山东省(春季高考)软件与应用技术类《C语言程序设计知识》考纲讲练测

| 16页
| 1人阅读
| 0人下载
精品

考点讲练测

学科网 zxxk.com学科网 zxxk.com

学科网 zxxk.com学科网 zxxk.com

 

编写说明:本专辑为山东省(春季高考)软件与应用技术类《C语言程序设计知识考纲讲练测》,严格依据山东省春季高考软件与应用技术类专业考试大纲(C语言程序设计部分)编写,精准对标考纲,兼顾考点覆盖与实战应用。每套讲练测提供讲义、课件、练习三大配套教学文件,贯穿九大核心环节:考点解读、思维导图、知识梳理、背诵环节、常考题、模拟题、课堂练习、课堂小结及课后测验,形成“讲-练-测-评”闭环式教学与复习逻辑,助力考生夯实基础、突破重难点。

 

山东省软件与应用技术类

《C语言程序设计知识考纲讲练测》

专题10 字符数组的定义及引用 讲义

[考点解读]

1.掌握字符数组的定义及引用。

[思维导图]

[知识梳理]

1.字符数组的定义与存储

(1)前面用一维、二维数组存放的都是数值,实际问题里还有大量“文字”要处理。C 语言没有专门的字符串类型,字符串是用字符数组来存放的——教材 5.3 节开篇就写明:字符数组即数组元素为字符类型的数组,字符数组可以存放字符串数据。所以字符数组既是数组的一种,也是 C 语言处理字符串的唯一手段。

(2)定义形式与一维数组完全相同,只是元素类型写成 char:char 数组名[常量表达式];。例如 char s[6]; page number 0

 

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司


考点讲练测

学科网 zxxk.com学科网 zxxk.com

学科网 zxxk.com学科网 zxxk.com

char s1[10]; char name[20];,方括号里的常量表达式表示数组长度,必须是常量表达式、不能含变量。char s[6]; 定义了 s[0]~s[5] 共 6 个元素,下标从 0 开始、最大下标是 5。每个元素存放一个字符,也可以赋 ASCII 码值(s[1]=66; 存入的是字符 B),char 每个元素占 1 个字节,所以元素个数与占用字节数相等。

表10-1  字符数组定义语句的组成

组成部分

示例

含义与要求

类型说明符

char

字符数组的元素类型只能是 char,每个元素占 1 个字节

数组名

s、str、name

命名规则与变量名相同,须遵循标识符命名规则

常量表达式

6、10、20

数组长度,即最多能容纳多少个字符,必须是常量表达式

分号

;

定义语句以分号结束,只分配存储空间,不产生输出

说明:字符数组的定义形式与一维数组完全相同,只是元素类型换成 char。char s[6]; 表示 s[0]~s[5] 共 6 个元素,每个元素存放一个字符,下标从 0 开始。

表10-2  常见字符数组的容量与最多可存字符数

定义语句

元素个数

占用字节

最多存放的字符数

char s[6];

6

6

5

char s1[10];

10

10

9

char s2[20];

20

20

19

char c[]="perfect";

8

8

7

说明:char 每个元素占 1 个字节,元素个数等于占用字节数。要把一个字符串整个存进去,必须留出一个位置给结束标志 '\0',所以长度为 6 的数组最多只能存 5 个有效字符。

(3)C 语言规定字符 '\0'(ASCII 值为 0 的字符)作为字符串的结束标志符,系统存储字符串常量时会自动在其末尾添加一个 '\0':"perfect" 有 7 个字符,在内存中却占 8 个字节(教材图5-6)。这个 '\0' 不显示、不计数,却是一切字符串处理的依据——后面的 strlen、printf("%s")、puts 都靠它判断字符串到哪儿结束。

程序段:字符串常量在内存中的样子(每个字符占 1 个字节)

/* "perfect" 在内存中:*/

/* p e r f e c t \0      共 8 个字节 */

/* 有效字符 7 个,'\0' 由系统自动加 */

char s[10] = "fashion";

/* 数组长 10、串长 7、占 10 个字节 */

表10-3  三种“零”的辨析(最容易混的考点)page number 1

 

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司


考点讲练测

学科网 zxxk.com学科网 zxxk.com

学科网 zxxk.com学科网 zxxk.com

写法

名称

ASCII 值

含义与用途

'\0'

转义字符 NUL

0

字符串结束标志,系统自动加在字符串常量末尾

'0'

数字字符 0

48

普通的字符,可以显示成数字 0

0

整型常量 0

—

数值零,与字符无关

说明:'\0' 是 ASCII 值为 0 的字符,屏幕上显示不出来;'0' 是 ASCII 值 48 的字符,能正常显示。判断字符串是否结束时只能用 '\0' 或 0,写成 '0' 就永远等不到结束,程序会越过数组继续往后读。

(4)字符数组与字符串是“容器与内容”的关系:数组是容器,字符串是装在里面的内容,内容以 '\0' 结尾。教材里 char s1[10]="fashion"; 就是定义了字符数组 s1 存放字符串 "fashion",这时要说清三个数——数组长度 10、字符串长度 7、占用字节 10。字符串长度只数 '\0' 之前的有效字符,与数组长度无关。同理 'a' 是字符常量、占 1 个字节,"a" 是字符串常量、占 2 个字节;"" 是空串,占 1 个字节、串长为 0。

表10-4  字符串常量与字符数组的关系

比较项

字符串常量 "perfect"

char s[8]="perfect";

有效字符

7 个

7 个

末尾 '\0'

系统自动添加

系统自动添加

占用字节

8 个

8 个

能否修改内容

不能,是常量

能,s[i] 是变量

在程序中的写法

"perfect"

s 或 s[i]

说明:字符串常量本身就带一个 '\0',所以 "perfect" 占 8 个字节而不是 7 个。字符数组只是把这些字节装进了自己的一块存储空间里,因此能逐个元素修改。

表10-5  数组长度、字符串长度与占用字节的区别

定义语句

数组长度

字符串长度

占用字节

能不能放下

char s[10]="perfect";

10

7

10

能,末尾还有 2 个 '\0'

char s[]="perfect";

8

7

8

能,正好放下

char s[8]="perfect";

8

7

8

能,长度刚好

char s[7]="perfect";

7

—

7

不能,初值超长、编译报错

说明:数组长度是“能装多少”,字符串长度是“已经装了多少”,两者不是一回事。字符串 "perfect" 有 7 个字符、占 8 个字节,数组长度必须不小于 8 才装得下。

2.字符数组的初始化

(1)初始化有两条思路:逐个字符赋初值,或直接用字符串常量赋初值。逐个字符写法是 char s[5]={'a','b','c','d','e'};,一个字符对一个元素;系统不会自动补 '\0',所以写满 5 个元素的 s 并不是字符串,而只写前几个时,没有赋到的元素才自动为 '\0'(教材 5.3.2 的例子、图5-7 就是这个状态)。page number 2

 

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司


由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。