C语言 深入浅出讲解指针的使用

 更新时间:2022年03月29日 17:26:10   作者:Fighting阳!  
指针是C语言中一个非常重要的概念,也是C语言的特色之一。使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值

一、利用指针倒序字符串

void _reversal(char* left, char* right)
{
  while (left < right)
  {
  	char tmp = *left;
  	*left = *right;
  	*right = tmp;
  	left++;
  	right--;
  }
}

通过上述代码不难看出,left与right分别代表一个字符数组的首端和尾端,通过中间变量 tmp进行首尾交换,left++中的left是char*类型,同时也可以看成为一维数组left[ i++],因此,移动的原理就是通过++移向下一个元素位置所在的地址right同理可得是移向上一个元素位置所在的地址。

二、题目实例

对于一个较大的整数 N(1<=N<=2,000,000,000)

比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这个数 字每三位加一个逗号,它会变得更加易于朗读。因此,这个数字加上逗号成如下的 模样:980,364,535请写一个程序帮她完成这件事情

输入描述:

一行一个整数 N

输出描述:

一行一个字符串表示添加完逗号的结果

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void _reversal(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr1[2000] = { 0 };
	gets_s(arr1);
	int len = strlen(arr1);
	//翻转字符串
	_reversal(arr1, arr1 + len - 1);
	char arr2[2000] = { 0 };
	char* pr1 = arr1;
	char* pr2 = arr2;
	int i = 0;
	while (i <= len / 3 + 1)
	{
		pr2[0] = pr1[0];
		pr2[1] = pr1[1];
		pr2[2] = pr1[2];
		pr2[3] = ',';
		pr1 += 3;
		pr2 += 4;
		i++;
	}
	int len1 = strlen(arr2);
	//翻转字符串
	_reversal(arr2, arr2 + len1 - 1);
	if (arr2[0] == ',')
	{
		char* arr3 = arr2 + 1;
		printf("%s", arr3);
	}
	else
	{
		printf("%s", arr2);
	}
	return 0;
}

就本题而言,为什么我们在插入的时候需要进行倒序呢,通过观察我们发现,插入的方式是从个位开始的,因此,从逻辑上我们需要将它进行倒序来满足这个基本原理,不然可能会出现最后两个数(或者是一个数)前面会有逗号产生,这是规则不允许的。

三、总结

对于这个题本身而言,方法不止一种,通过这道题的解法,目的就是可以 更好的理解通过指针如何逆序字符串加深对指针的了解,希望对大家有所 帮助,同时也希望小伙伴们指出不足之处,相互改进,共同进步。

到此这篇关于C语言 深入浅出讲解指针的使用的文章就介绍到这了,更多相关C语言 指针的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入C++中struct与class的区别分析

    深入C++中struct与class的区别分析

    本篇文章是对C++中struct与class的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言UDP传输系统源码

    C语言UDP传输系统源码

    这篇文章主要为大家分享了C语言UDP传输系统的源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • c++中深浅拷贝以及写时拷贝的实现示例代码

    c++中深浅拷贝以及写时拷贝的实现示例代码

    这篇文章主要给大家介绍了关于c++中深浅拷贝以及写时拷贝实现的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • C语言实现三子棋程序

    C语言实现三子棋程序

    这篇文章主要为大家详细介绍了C语言实现三子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言实现密码强度检测

    C语言实现密码强度检测

    这篇文章主要为大家详细介绍了C语言实现密码强度检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Matlab实现简易纪念碑谷游戏的示例代码

    Matlab实现简易纪念碑谷游戏的示例代码

    《纪念碑谷》是USTWO公司开发制作的解谜类手机游戏,在游戏中,通过探索隐藏小路、发现视力错觉以及躲避神秘的乌鸦人来帮助沉默公主艾达走出纪念碑迷阵。本文将用Matlab编写简易版的纪念碑谷游戏,感兴趣的可以了解一下
    2022-03-03
  • QT获取显示当前时间和日期的方法(用QTime,QDate和QDateTime)

    QT获取显示当前时间和日期的方法(用QTime,QDate和QDateTime)

    获取当期日期时间在我们日常开发中经常会遇到,下面这篇文章主要给大家介绍了关于QT获取显示当前时间和日期的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • C语言socket编程开发应用示例

    C语言socket编程开发应用示例

    这篇文章主要介绍了C语言socket编程开发应用,示例简单,大家参考使用吧
    2013-12-12
  • C++ map用法总结(整理)

    C++ map用法总结(整理)

    这篇文章主要介绍了C++ map用法总结(整理),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Cocos2d-x人物动作类实例

    Cocos2d-x人物动作类实例

    这篇文章主要介绍了Cocos2d-x人物动作类实例,本文用大量代码和图片讲解Cocos2d-x中的动作,代码中同时包含大量注释说明,需要的朋友可以参考下
    2014-09-09

最新评论