题目:字符串逆序(C语言指针实现)
附1:
通常数组名都是代表数组首元素的地址,但是有两个例外,一个是sizeof(数组名),意思是计算整个数组的大小;另一个是&(数组名),取出整个数组的地址。
思路:
1.关于逆置函数:
如何交换两个指针变量?我举个例子来方便大家理解。eg:假设你眼前有一杯美味的葡萄酒和一杯令人陶醉的红酒,如何将将葡萄酒倒入原先装有红酒的杯子和将红酒倒入原先装有葡萄酒的杯子呢?很简单,我们只需要再拿一个空的杯子作为交换的媒介就可以了。首先将葡萄酒倒入空杯子,再将红酒倒入原先装有葡萄酒的杯子,接着再将葡萄酒倒入我们原先装有红酒的杯子即可完成交换。所以我们要想交换两个指针变量同样也需要定义一个临时变量来充当交换的媒介。我们用while循环来进行多次交换,每次交换结束后要记得挪动双指针的位置以便下次循环的交换。
2.关于main函数,我们需要注意函数的调用是传址传递,而不是传值传递,所以我们的逆置函数就可以用指针来接收。
代码实现如下:
附2:图解
…以此类推,两个指针逐步向中间的位置挪动并交换内容
代码提取:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//常在河边走,哪有不湿鞋。要牢记加上strlen的头文件!!!
//就算有时候你不加也能运行不出错,但是总有出错的那天的!!!
#include<string.h>
//指针变量接收传过来的参数,数组名一般情况下是数组首元素的地址,而指针就是用来存放地址的变量
//你这里写成char arr[]也是完全没有问题的,但是我这样写是本质,你那样写能方便初学者理解
void Reverse(char *arr)
{
char *left = arr;//arr实际上就是arr[0],也就是(arr+0)
//算出数组的大小后一定要减1,不然会数组下标越界的!!!因为数组下标是从0开始的,这点切记
char *right = arr + strlen(arr) - 1;
while (left < right)//当左边的位置和右边的位置不相等时说明还需要交换
{
//创建临时变量用于两个数的交换
char temp = *left;
*left = *right;
*right = temp;
//交换完成后,左边和右边的位置都逐步向中间移动,继续交换下去
++left;
--right;
}
}
int main()
{
char arr[] = "abcdef";//定义一个足够大的数组能容纳你所需要逆置的变量
//变量是根据需要随时可以改变的,你可以根据需要输入你想要逆置的变量,我这里是举个例子
Reverse(arr);//调用函数实现逆置,这里属于传址传递
printf("%s\n", arr);//输出逆置后的答案
system("pause");
return 0;
}
备注:
楼主不才,不喜勿喷,若有错误或需要改进的地方,非常感谢你的指出,我会积极学习采纳。谢谢家人们一直以来的支持和鼓励,我会继续努力再接再励创作出更多优质的文章来回报家人们的。编程爱好的xdm,若有编程学习方面的问题可以私信我一同探讨(我尽力帮),毕竟“众人拾柴火焰高”,大家一起交流学习,共同进步!
2021.9.13
版权声明:本文为weixin_53811859原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。