文章目录
- 关于数组
- 二级指针
- 字符串
- 字符串的输入与输出
- 字符串函数
- 1、字符数组的输入和输出:
- 2、5种相关函数:
关于数组
char *fruits[LEN] = { // 定义一个字符指针数组,包含LEN个元素
"apple", // 初始化第1个元素为字符串"apple"
"cherry", // 初始化第2个元素为字符串"cherry"
"grape", // 初始化第3个元素为字符串"grape"
"peach", // 初始化第4个元素为字符串"peach"
"watermelon" // 初始化第5个元素为字符串"watermelon"
};
char **ptr = fruits; // 定义一个字符指针的指针ptr,赋值为fruits数组的首元素的地址
二级指针
如何声明一个指向函数的指针?
void print(int num); // 声明函数
void (*funptr)(int) = print; // 声明指向函数的指针, 该函数接受一个int参数, 返回void, 并用print函数的地址初始化
函数名是什么?
函数名被使用时总是由编译器将它转换为该函数类型的函数指针, 比如 print 的类型就是 void () (int) 所以可以用 print 初始化 funptr. 当使用 & 时只是显示的说明了编译器的转换操作, 所以 print 与 &print 都是 void () (int) 类型.
如何通过指向函数的指针调用函数?(3种方法)
print(10); // (1) 使用函数名调用print函数
(*funptr)(10); // (2) 使用指向函数指针解引调用print函数`
funptr(10); // (3) 使用指向函数指针直接调用print函数
字符串
字符串的输入与输出
输入:如果想把一个字符串读取到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串,C库提供了三个读取字符串的函数:scanf()、gets()和fgets()
输出:C语言有三个输出字符串的标准库函数:puts()、fputs()和printf()
题目:输入一个字符串,并反向输出。
/**
reverse()函数:
以上代码实现了一个字符串翻转的函数,函数名为 reverse,输入参数为一个指向字符数组的指针。
函数内部定义了三个指针变量,head 和 tail 初始时都指向字符串的第一个字符,ch 用来暂存头指针指向的字符。首先,通过 tail 指针遍历字符串,移动到字符串的倒数第二个字符(因为最后一个字符是 '\0' 结尾符),然后将 tail 指针调整到倒数第二个字符处。接着,使用 head 和 tail 指针交替指向的字符进行交换,直到 head 指针超过了 tail 指针。在交换字符的过程中,需要用变量 ch 暂存 head 指针指向的字符。注意,交换完一对字符后,需要将 tail 指针前移一位(tail--),head 指针后移一位(head++)。
最终,调用该函数后,输入的字符数组会被原地翻转。
*/
#include <stdio.h>
#define STR_LEN 101
// 定义一个字符串翻转的函数
void reverse(char *str)
{
// 定义两个指针,head 指向字符串的开头,tail 指向字符串的结尾
char* head = str;
char* tail = str;
char ch;
// 移动 tail 指针到字符串的倒数第二个字符
while(*tail++);
tail -= 2; // 调整 tail 指向倒数第二个字符
// 交换 head 和 tail 指向的字符,直到 head 指针超过 tail 指针
while(head < tail)
{
ch = *head; // 用 ch 存储 head 指向的字符
*head = *tail; // 将 head 指向的字符和 tail 指向的字符交换
*tail-- = ch; // 将 tail 指向的字符修改为 ch 存储的字符,同时将 tail 指针向前移动一位
head++; //将head指针后移
}
}
int main(int argc, char** argv)
{
char str[STR_LEN];
char *rev_str = NULL;
//输入处:
printf("请输入一个字符串(length<=100):\n");
scanf("%s", str);
reverse(str);
//输出处:
printf("反转后的字符串为:\n%s", str);
return 0;
}
输入和输出的其他写法:
//法一:
puts("请输入一个字符串(length<=100):");
gets(str);
reverse(str);
puts("反转后的字符串为:");
puts(str);
//法二:
fputs("请输入一个字符串(length<=100):\n", stdout);
fgets(str, STR_LEN, stdin);
reverse(str);
fputs("反转后的字符串为:", stdout);
fputs(str, stdout);
注意:fputc只能单独输出一个字符,fputs可以输出一个字符串
字符串函数
1、字符数组的输入和输出:
输入 | 输出 | |
---|---|---|
第一组 | scanf(格式控制,地址表列) | printf(格式控制,输出表列) |
第二组 | gets(字符数组) | puts(字符数组) |
第三组 | fgets(str, STR_LEN, stdin) | fputs(str, stdout) |
2、5种相关函数:
函数: | 表现形式1 | 表现形式2 |
---|---|---|
1、字符串连接函数 | strcat(字符数组1,字符数组2) | |
2、字符串复制函数 | strcpy(字符数组1,字符数串2或者字符数组名) | strncpy(字符数组1,字符串2或者字符数组名,n) |
3、字符串比较函数 | strcmp(字符串1或者字符数组,字符数串2或者字符数组) | |
4、字符串长度函数 | strlen(字符串或者字符数组) | |
5、 字符串转换大小写函数 | 大写转小写:strlwr(字符数组) | 小写转大写:strupr(字符数组) |