C语言中的字符串与数组:特性、操作及对比

需积分: 9 0 下载量 161 浏览量 更新于2024-07-14 收藏 1.48MB PPT 举报
"字符串与数组关系-C语言知识回顾" 在C语言中,字符串与数组有着密切的关系,因为字符串本质上就是一维字符数组。数组是由相同类型元素构成的有序集合,而字符数组则专门用于存储字符序列,即字符串。字符串的特殊之处在于它以空字符'\0'作为结束标志,这使得C语言能够识别字符串的边界。 数组在C语言中扮演着重要角色,它们具有以下特点: 1. 数组名是一个指向数组首元素的常量指针,因此可以通过数组名访问数组的第一个元素。 2. 数组元素可以使用下标法(如 `str[i]`)或指针法(如 `*(str+i)`)进行访问。 3. 当数组作为函数参数时,实际上是传址传递,即传递的是数组首元素的地址,而不是整个数组的副本。 字符串的赋值和初始化有多种方式: 1. 直接初始化:`char str[] = {"Hello!"}` 或 `char str[] = {'H', 'e', 'l', 'l', 'o', '!'}`。两者都会自动在末尾添加'\0'。 2. 指针初始化:`char *cp = "Hello"`。这种方式创建的是字符串字面值常量,存储在只读内存中,不可修改。 对于输入输出,C语言提供了专门处理字符串的格式化输入输出函数: - `scanf("%s", str)` 用于从标准输入读取字符串直到遇到空格、制表符或换行符。 - `printf("%s", str)` 用于将字符串输出到标准输出。 - `gets(str)` 从标准输入读取一行文本,包括空格,但已废弃,因安全性问题不应再使用。 - `puts(str)` 输出字符串并自动在末尾追加换行符。 指针在处理字符串和数组时也起到关键作用: - 指针变量可以用来存储数组的首地址,例如 `char *cp` 可以指向字符数组 `str` 的起始位置。 - 通过指针,我们可以动态地改变字符串或数组的引用,例如 `cp = "World"` 将 `cp` 指向新的字符串字面量。 在给定的代码片段中,错误的用法有: 1. `str="Hello"` 和 `str="Hello!"` 是非法的,因为数组名是常量指针,不能赋值。 2. `a={1,2,3,4,5}` 和 `p={1,2,3,4,5}` 也是错误的,因为数组和指针不能直接用初始化列表赋值,应使用循环或初始化列表初始化。 3. `scanf` 和 `printf` 通常用于读写字符串,但不适用于处理包含空格的输入,应谨慎使用。 C语言中的结构体和共用体是构造类型,它们允许我们定义包含多种数据类型的新类型: - 结构体(struct)让不同类型的变量组合成一个实体,可以声明结构体类型而不分配内存,如 `struct student`。分配内存通常在声明结构体变量时完成,如 `struct student s;`。 - 共用体(union)则允许不同类型的变量共享同一块内存,但同一时间只能有一个成员有效。共用体的大小等于其最大成员的大小。 枚举(enum)类型提供了一种创建自定义整数常量的方式,例如: ```c enum Color {Red=1, Green, Blue}; ``` 这里 `Red` 被赋值为1,`Green` 自动递增为2,`Blue` 为3。枚举类型可以用于声明变量,如 `enum Color c;`。 理解字符串与数组的关系以及C语言中的基本数据类型、构造类型、指针和内存管理是学习C语言的基础,这些知识对于编写有效的C程序至关重要。