如何用c语言实现逆序打印(详解)
重点斜杠0是字符串结束标志
if语句限制条件
strlen计算字符个数
传址调用 解引用
先看代码
#include<stdio.h>
int my_strlen(char* str) 注释模拟一个strlen函数
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
char temp = *str;//1储存a
int len = my_strlen(str);
*str = *(str +len - 1);//2求f的位置str是a len是6减一解引用找到数组f 指针地址可以直接找到数组下标
*(str + len - 1) = '\0';//3 把原先f的位置放斜杠0
//只有2个及以上的字符时才递归
if(my_strlen(str+1) >= 2)f bcde加1跳过f剩下bcde 如果剩下的字符大于等于2进来递归
{
reverse_string(str + 1);//4 跳过f字符 每次递归完跳过一个字符
}
*(str + len - 1) = temp;//5最后递归结束 从最后一次递归开始依次释放字符
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);//fedcba
return 0;
}
如果我在reverse string这个自定里函数里调用这个mystrlen, 如果有五个字符 它往mystrlen传参就是五个字符, 用星str来接收 while循环是来判断斜杠0的,如果遇到0为假终止循环 如果没斜杠0 str就加加 count也加加
reverse string
先a和f交换 f到 a的位置然后逆序 abcdef交换 然后bcde是一个字符串 然后再交换b和e 然而直接交换a和f 变成fbcdea 那么bcde就不是字符串了
所以先用tmp把a储存起来 当我们有两个字符的时候才能递归交换
这是运行递归的顺序