关于C语言杂记7

关于数组

 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(字符数组)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值