当前课程知识点:C语言程序设计 >  第7章 数组 >  7.5 字符串的本质 >  字符串的本质

返回《C语言程序设计》慕课在线视频课程列表

字符串的本质在线视频

下一节:字符串操作的常用函数

返回《C语言程序设计》慕课在线视频列表

字符串的本质课程教案、知识点、字幕

同学们

大家好

今天我们来学习C语言中

字符数组和字符串的本质

这一节我们来介绍字符数组

字符数组也是数组

只不过它的元素类型为字符型

由于数组是数据元素的一个序列

因而字符数组对应的就是一个字符的序列

有关字符数组的定义

引用和初始化的方法

与前面的数组相应方法类似

只不过对数组元素进行赋值时

应该赋予相应的字符值

对字符数组的初始化

最容易理解的方式是逐个字符

给数组中各个元素以初值

这种方法

看起来显得有点笨拙

因为

一个个字符的序列

其实

就是一个字符串

因而

我们没有必要

一个字符一个字符地进行初始化

而对于一个已经定义的字符数组

在输入时

我们也很自然的想到

一个字符一个字符地输入

在输出时

也一个字符一个字符地输出

那么

我们有没有更好的方法来解决这个问题呢

回答是肯定的

那就是使用字符串概念

我们人类表示字符串

可以使用专门的定界符号来表示它的边界

字符串的开始

结束位置

但是计算机做不到

字符串的开始位置

我们可以使用字符数组名来表达

为了测定字符串的实际长度

也为了表示字符串的结束位置

c语言规定了一个字符串结束标志

以字符值为零的特殊字符

来表示一个串的结束位置

这样一来

我们就可以使用字符串

来实现字符数组的输入和输出了

在字符数组的初始化过程中

也同样可以使用字符串常量来对其进行初始化

大大简化字符数组初始化的书写方法

只是在这个过程当中

需要注意一个问题

那就是字符数组的空间大小

应该保留至少一个

专门用来存放字符串结束标志的元素位置

这样一来

字符数组的输入和输出

就变得更加灵活

我们既可以按传统的方法

逐个字符地输入和输出

用格式符百分号c

依次输入和输出一个个字符

也可以将整个字符数组一次输入或输出

使用格式符百分号s

在使用printf函数输出字符数组时

应注意如下几点

1.函数中输出表达式是字符数组名

而不是数组元素

因为这个字符数组作为一个整体考虑

才对应到一个字符串

2.输出相应字符时

只要遇到了字符串结束符

串的输出就会自动结束

即使数组长度大于字符串的实际长度

也是如此

3.输出字符中

不包括字符串结束符本身

因为这个地方的字符串结束符

只是起到一个控制边界的作用

并不是实际需要输出的字符

4.如果一个字符数组中包含

一个以上的字符串结束符

则在遇到第1个字符串结束符时

输出过程就结束了

当我们使用scanf函数输入

一个字符数组时

也需要注意一些问题

1. scanf函数中的输入项

是已经定义的字符数组名

而不是取某个字符数组元素的地址

在c语言中

数组名

它的语法含义是

该数组第1个元素

首元素

的起始地址

也就是该数组在内存中分配的起始地址

2.如果在输入字符串的过程当中

遇到了空格字符

输入过程自动结束

因为scanf函数是

以空格来间隔不同输入项的

这一点要特别注意

那么我们又如何来输入

一个带有空格的字符串呢

这一点使用 scanf函数无法做到

为了解决这个问题

c语言中给我们提供了一些专门用于

字符串处理的库函数

我们将在下一小节给大家介绍

同学们

今天的内容就讲到这里

我们下节课再见

C语言程序设计课程列表:

第1章 C语言程序设计预备知识

-计算思维与计算机

--计算思维与计算机

--计算思维与计算机

--计算思维和计算机

第2章 C语言程序设计基础

-2.1 程序设计语言的发展及其特点和应用

--程序设计语言的发展及其特点和应用

--程序设计语言的特点及发展

- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤

-- C语言程序的基本结构及编制C语言程序的基本步骤

--C语言程序的结构和编制步骤

第3章 基本数据类型、运算符与表达式

-3.1 C语言的数据类型

--C语言的数据类型

--C语言的数据类型

-3.2 常量

--常量

--常量

-3.3 什么是变量

--什么是变量

--什么是变量

-3.4 如何进行算术运算

--如何进行算术运算

--如何进行算术运算

-3.5 赋值运算符和逗号运算符

--赋值运算符和逗号运算符

--赋值运算符和逗号运算符

-3.6 数据类型转换

--数据类型转换

--数据类型转换

第4章 基本输入输出和顺序程序设计

-4.1 格式化输出printf

--格式化输出printf

--格式化输出

-4.2 格式化输入scanf及字符数据的非格式化输入输出

--格式化输入scanf及字符数据的非格式化输入输出

--格式化输入

第5章 选择结构程序设计

-5.1 关系运算符和关系表达式

--关系运算符和关系表达式

--关系运算符和关系表达式

-5.2 逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

-5.3 条件运算符和条件表达式

--条件运算符和条件表达式

--条件运算符和条件表达式

-5.4 if语句

--if语句

--if语句

-5.5 switch语句

--switch语句

--switch语句

第6章 循环结构程序设计

-6.1 while语句

--while语句

--while语句

--do-while语句

-6.2 for语句

--for语句

--for语句

-6.3 循环的嵌套

--循环的嵌套

--循环的嵌套

-6.4 break语句和continue语句

--break语句和continue语句

--break和continue语句

第7章 数组

-7.1 一维数组的定义和引用

--一维数组的定义和引用

--一维数组的定义和引用

-7.2 一维数组的赋值

--一维数组的赋值

--一维数组的赋值

-7.3 二维数组的定义和引用

--二维数组的定义和引用

--二维数组的定义和引用

-7.4 二维数组的赋值

--二维数组的赋值

--二维数组的赋值

-7.5 字符串的本质

--字符串的本质

--字符串的本质

-7.6 字符串操作的常用函数

--字符串操作的常用函数

--字符串常用函数

-7.7 字符串数组

--字符串数组

--字符串数组

第8章 函数

-8.1 函数概述

--函数概述

--函数概述

-8.2 有参函数

--有参函数

--有参函数

-8.3 函数参数的传递方式

--函数参数的传递形式

--函数参数的传递方式

-8.4 变量的作用域和生存期

--变量的作用域和生存期

--变量的作用域和生存期

-8.5 变量的存储类型

--变量的存储类型

--变量的存储类型

-8.6 函数的嵌套和递归调用

--函数的嵌套和递归调用

--函数的嵌套和递归调用

-8.7 函数的作用域与封装

--函数的作用域与封装

--函数的作用域与封装

第9章 指针

-9.1 指针变量的概念(上)

--指针变量的概念(上)

--指针变量的概念(上)

-9.2 指针变量的概念(下)

--指针变量的概念(下)

--指针变量的概念(下)

-9.3 指向一维数组的指针变量

--指向一维数组的指针变量

--指向一维数组的指针变量

-9.4 指向二维数组的指针变量(上)

--指向二维数组的指针变量

--指向二维数组的指针变量(上)

-9.5 指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

-9.6 动态内存分配

--动态内存分配

--动态内存分配

第10章 预处理命令

-10.1 编译预处理

--编译预处理

第11章 复杂数据类型

-11.1 用户自己建立数据类型

--用户自己建立数据类型

--用户自己建立数据类型

-11.2 定义结构体类型变量

--定义结构体类型变量

--定义结构体类型变量

-11.3 结构体变量的引用与初始化

--结构体变量的引用与初始化

-11.4 结构体数组

--结构体数组

--结构体数组

-11.5 指向结构体类型数据的指针

--指向结构体类型数据的指针

--指向结构体类型数据的指针

第12章 文件

-12.1 文件的基本概念和文件指针

--文件的基本概念和文件指针

--文件的基本概念和文件指针

-12,2 文件的打开和关闭

--文件的打开和关闭

--文件的打开和关闭

-12.3 文本文件读写

--文本文件读写

--文本文件读写

-12.4 二进制文件读写

--二进制文件读写

--二进制文件读写

字符串的本质笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。