1. 字符串
1.1 字符串数组的初始化
- 注意:
- 对一个字符串数组,如果不做初始化赋值,必须指定数组长度。
- 字符串数组的最后一个字符位置要留给字符串的结束标识
'\0'。
- 示例:c
char ch[10]; // 最多存放由 9 个字符构成的字符串,最后一个位置留给 '\0'
1.2 字符串的输入
- 使用
scanf函数:scanf函数在读取字符串时,会以空格作为字符串的结束符。- 示例:c
char str[10]; scanf("%s", str); // 输入 "Hello World" 时,str 只会存储 "Hello"
- 使用
fgets函数:fgets函数可以读取包含空格的字符串,并且可以指定读取的最大字符数。- 语法:c
char *fgets(char *s, int size, FILE *stream); - 参数:
s:存储字符串的数组名称。size:数组里存储区的个数。stream:输入流,通常用stdin表示键盘。
- 示例:c
#include <stdio.h> int main() { char str[100]; printf("请输入一个字符串: "); fgets(str, 100, stdin); printf("你输入的字符串是: %s", str); return 0; }
1.3 字符串的处理函数
1.3.1 strlen 函数
- 功能:
- 计算指定字符串的长度,不包含字符串结束符
'\0'。
- 计算指定字符串的长度,不包含字符串结束符
- 语法:c
size_t strlen(const char *s); - 参数:
s:字符串的首地址。
- 返回值:
- 字符串
s的长度,size_t为unsigned int类型。
- 字符串
- 示例:c
#include <stdio.h> #include <string.h> int main() { char str[] = "Hello, World!"; size_t len = strlen(str); printf("字符串长度: %zu\n", len); // 输出 13 return 0; }
1.3.2 atoi 和 atof 函数
atoi函数:- 将字符串转换为整数。
- 语法:c
int atoi(const char *str); - 参数:
str:需要转换的字符串。
- 返回值:
- 转换后的整数值。
- 示例:c
char str1[] = "-10"; int num1 = atoi(str1); printf("num1 = %d\n", num1); // 输出 -10 char str2[] = "-10a"; int num2 = atoi(str2); printf("num2 = %d\n", num2); // 输出 -10 char str3[] = "a-10"; int num3 = atoi(str3); printf("num3 = %d\n", num3); // 输出 0
atof函数:- 将字符串转换为浮点数。
- 语法:c
double atof(const char *str); - 参数:
str:需要转换的字符串。
- 返回值:
- 转换后的浮点数值。
- 示例:c
char str[] = "0.123"; double num = atof(str); printf("num = %lf\n", num); // 输出 0.123
1.4 作业:编写一个函数 char_contains
- 需求:
- 编写一个函数
char_contains(char str[], char key),如果字符串str中包含字符key则返回数值 1,否则返回数值 0。
- 编写一个函数
- 实现:c
#include <stdio.h> #include <stdbool.h> int char_contains(char str[], char key) { for (int i = 0; str[i] != '\0'; i++) { if (str[i] == key) { return 1; } } return 0; } int main() { char str[] = "Hello, World!"; char key = 'o'; if (char_contains(str, key)) { printf("字符串中包含字符 '%c'\n", key); } else { printf("字符串中不包含字符 '%c'\n", key); } return 0; }
2. 指针基础
2.1 指针概念
- 内存单元:
- 在计算机中,所有数据都存储在内存单元中,每个内存单元都有一个对应的地址。
- 通过这个地址可以找到对应单元中存储的数据。
- 指针:
- 指针是一个变量,它存储的是另一个变量的地址。
- 通过指针可以访问和操作该地址所指向的变量。
2.2 指针的声明和初始化
- 声明:
- 语法:c
数据类型 *指针名; - 示例:c
int *p; // 声明一个指向整数的指针 char *pc; // 声明一个指向字符的指针
- 语法:
- 初始化:
- 语法:c
指针名 = &变量名; - 示例:c
int a = 10; int *p = &a; // 初始化指针 p,使其指向变量 a
- 语法:
2.3 指针的使用
- 访问指针指向的变量:
- 语法:c
*指针名 - 示例:c
int a = 10; int *p = &a; printf("a 的值: %d\n", *p); // 输出 10 *p = 20; // 通过指针修改 a 的值 printf("a 的值: %d\n", a); // 输出 20
- 语法:
2.4 指针与数组
- 数组名即指针:
- 数组名本质上是一个指向数组第一个元素的指针。
- 示例:c
int arr[5] = {1, 2, 3, 4, 5}; int *p = arr; // 等价于 int *p = &arr[0]; printf("arr[0] 的值: %d\n", *p); // 输出 1 p++; // 指针移动到下一个元素 printf("arr[1] 的值: %d\n", *p); // 输出 2
总结
- 字符串:
- 字符串数组的初始化:必须指定数组长度,最后一个位置留给
'\0'。 - 字符串的输入:
scanf以空格为结束符,fgets可以读取包含空格的字符串。 - 字符串处理函数:
strlen计算字符串长度,atoi和atof进行字符串转换。 - 作业:实现了
char_contains函数,判断字符串是否包含指定字符。
- 字符串数组的初始化:必须指定数组长度,最后一个位置留给
- 指针:
- 指针概念:指针存储的是另一个变量的地址。
- 指针的声明和初始化:
数据类型 *指针名;和指针名 = &变量名;。 - 指针的使用:通过
*指针名访问和修改指针指向的变量。 - 指针与数组:数组名是一个指向数组第一个元素的指针。
