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语言指针教程示例详解
目录 指针 内存 指针类型 指针运算 二级指针 指针数组 指针 指针提供了对地址操作的一种方法,因此,使用指针可使得 C 语言能够更高效地实现对计算机底层硬件的操作.另外,通过指针可以更便捷地操作数组.在一定意义上可以说,指针是 C 语言的精髓. 概念解释就不去搬原定义了,又臭又长不好理解,精炼两点就是: 1.指针是内存中的一个最小单元的编号,也就是地址: 2.平时我们说的指针,通常是指指针变量,用来存储内存地址的变量 也就是说:指针就是地址,口语中指针通常是指针变量 内存 要搞明白指针首先要搞
-
深入了解C语言中的const和指针
目录 前言 指针的赋值 问题 ANSI C 有关简单赋值的标准 问题解决 const修饰 const修饰变量 const修饰指针 前言 文章内容由阅读<C专家编程>整理而来.希望可以帮助大家解决在指针赋值和const方面的问题,也希望大家多多指正文章中的错误,共同进步. 指针的赋值 问题 将一个类型为 char** 的值赋值给一个 const char** 类型的对象是否合法呢? 先说结果,在vs的环境下,编译器不会报错也不会有任何警告. 但在linux环境下用gcc编译就会出现下面的警告:
-
C语言基础知识点指针的使用
目录 一.指针的作用 二.地址与指针 三.指针变量 四.数组与指针 五.指针自加自减运算 六.指向指针的指针 七.指针变量作为函数形参 八.函数指针 九.函数指针数组 十.指针的应用场景 一.指针的作用 运用指针可以有效地表达一些复杂地数据结构,比如系统地动态分配内存.消息机制.任务调度.定时器等等.掌握指针可以使你的程序更加简洁.紧凑.高效.那么在单片机领域,如果是做稍微大一点的项目,需要把每一个功能做出模块化,硬件驱动层和应用层分别独立运行,即使更换单片机型号也不用修改应用层程序,即移植性非
-
C语言的数组指针与函数指针详解
目录 前言 函数指针语法 数组指针与指针数组 总结 前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用. 函数指针语法 定义一个函数指针,并通过函数指针间接调用函数: int get_num(int a, int b) { return a + b; } int (*func)(int a, int b); //定义了一个函数指针func,它指向 返回值为int 参数为 int a, int b的函数 func = &get_num; //函数指
-
C语言返回值指针的函数详解
#include<stdio.h> void main() { int a[5] = { 1,3,5,7,9 }; int* name[5] = { &a[0],&a[1],&a[2] ,&a[3] ,&a[4] }; int i; for (i = 0; i < 5; i++) { printf("%d ", *name[i]); } printf("\n\n"); } #include<stdio.
-
深入浅出理解C语言指针的综合应用
目录 指针是什么? 指针变量 使用指针变量的例子 通过指针引用数组 &数组名vs数组名 野指针 野指针成因 1.指针未初始化 2.指针越界访问 如何避免野指针 指针运算 指针是什么? 指针是c语言中的一个重要概念,也是C语言的一个重要的特色,正确而灵活地运用它,可以使程序简洁,紧凑,高效,每一个学习和使用c语言的人,都应当深入了解地学习和掌握指针,可以说,不掌握指针就是没有掌握C的精华也可以说 指针是C语言的灵魂(doge) 由于通过地址能找到所需的变量单元,可以说,地址指向变量单元,打个比方,
-
老生常谈C语言中指针的使用
目录 前提 一.指针基础 1.1变量指针 1.2数据指针 1.3指针的本质 1.4指针数组 1.5指针的移动 1.5Scanf函数的解释 二.指针的进阶玩法 2.1二维指针 2.2结构体指针 结语 前提 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分.指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同.有了指针以后,不仅可以对数据本身,也可以对
-
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*类型,同
-
C语言深入浅出讲解顺序表的实现
目录 1.线性表 2.顺序表 2.1 概念及结构 2.2 提供接口 2.3 接口实现 今天起开始编写数据结构中的各种数据结构及算法的实现,说到顺序表,我们首先得了解下线性表. 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表.链表.栈.队列.字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线.但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储. 2.顺序表
-
C语言全方位讲解指针与地址和数组函数堆空间的关系
目录 一.一种特殊的变量-指针 二.深入理解指针与地址 三.指针与数组(上) 四.指针与数组(下) 五.指针与函数 六.指针与堆空间 七.指针专题经典问题剖析 一.一种特殊的变量-指针 指针是C语言中的变量 因为是变量,所以用于保存具体值 特殊之处,指针保存的值是内存中的地址 内存地址是什么? 内存是计算机中的存储部件,每个存储单元有固定唯一的编号 内存中存储单元的编号即内存地址 需要弄清楚的事实 程序中的一切元素都存在于内存中,因此,可通过内存地址访问程序元素. 内存示例 获取地址 C语言中通
-
C语言全方位讲解指针的使用
目录 一.指针的概念 1.1.变量和地址 1.2.指针变量和指针的类型 二.指针变量 2.1.指针变量的定义及使用 2.2.指针运算 三.野指针 3.1.概念: 3.2.野指针的成因 3.3.如何规避野指针 四.字符指针 4.1.字符指针类型 4.2.例题 五.指针与数组 5.1.指针与二维数组 5.2.多级指针 六.指针数组 七.数组指针 7.1.数组指针的定义 7.2.&数组名与数组名 7.3.数组指针的使用 八.指针与函数 8.1.函数指针的定义 8.2.指向函数的指针 总结 接着上次的函
-
C语言详细讲解指针数组的用法
目录 1. 指针数组定义方法 2. 指针的指针(二级指针) 3. 字符串和指针 4. 数组指针 定义方法 数组指针的用法 1. 指针数组定义方法 格式: 类型说明符 *数组名[ 元素个数 ] int *p[10]; // 定义了一个整型指针数组p,有10个元素,都是int *类型的变量 指针数组的分类: 同指针类型的分类,见上一篇 大多数情况下,指针数组都用来保存多个字符串. #include <stdio.h> int main() { char *name[5] = {"Hell
-
C语言深入浅出讲解直接插入排序算法的实现
目录 直接插入排序 1.基本思想 2.算法实现 3.时间复杂度 插入排序分为两种:直接插入排序&希尔排序 直接插入排序 1.基本思想 直接插入排序是一种简单的插入排序算法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 . 说得通俗一点就是: 假设区间[0, end]有序,将end+1位置的值插入到[0, end]中,保持区间[0, end+1]依旧有序. 生活中我们玩扑克牌时,就用了插入排序的思想. 在这里,
-
C语言深入讲解指针与结构体的使用
目录 1 啥是指针 1.1指针与指针变量 1.2总结 2 指针和指针类型 2.1指针+-整数 3 野指针 3.1 野指针的成因 1指针未初始化 2指针越界访问 3指针指向的空间释放 3.2 如何避免野指针的出现 4 二级指针 5 指针数组 6 结构体 6.1 结构的声明 6.2 结构体变量的定义和初始化 6.3 结构体的访问 6.4 结构体传参 1 啥是指针 刚刚接触指针的同学肯定会很懵逼,指针是啥啊?指南针哈哈,不和大家开玩笑,我们进行正题吧,指针是本质是就是地址,但我们要注意我们口头上常说的
-
C语言例题讲解指针与数组
目录 1.概要复习 2.指针与数组笔试题 2.1一维数组 2.2字符数组 2.3字符串数组 2.4字符串指针 2.5二维数组 1.概要复习 本篇的内容主要围绕指针与数组.指针与字符串等之间的关系,以及进一步理解sizeof .strlen 的使用与意义. 数组是指具有相同类型元素的集合,字符串常量是一个指向在连续空间里存放的字符的首字符的地址的指针.我们会在下面理解数组与字符串数组的不同. sizeof 是一个操作符,是计算类型空间大小的.strlen 是针对字符串的库函数,用来求字符串的长度.
-
C语言深入浅出分析函数指针
目录 我们先看一个代码: #include<stdio.h> void test() { printf("haha\n"); } int main() { printf("%p\n", test); printf("%p\n", &test); return 0; } 输出的是两个地址,函数名就是函数的地址 将函数的地址存起来: #include<stdio.h> void test() { printf(&quo
-
C语言零基础讲解指针和数组
目录 一.指针和数组分析-上 1.数组的本质 2.指针的运算 3.指针的比较 4.小结 二.指针与数组分析-下 1.数组的访问方式 2.下标形式 VS 指针形式 3.a 和 &a 的区别 4.数组参数 5.小结 一.指针和数组分析-上 1.数组的本质 数组是一段连续的内存空间 数组的空间大小为 sizeof(array_type) * array_size 数组名可看做指向数组第一个元素的常量指针 下面看一段代码: #include <stdio.h> int main() { int
随机推荐
- Perl中的正则表达式介绍
- 正则表达式应用之提炼百度歌词的实现代码
- MYSQL批量插入数据的实现代码第1/3页
- 将Python的Django框架与认证系统整合的方法
- C#编写的生辰八字计算程序
- Android自定义View绘制随机生成图片验证码
- php封装的表单验证类完整实例
- SERV-U 的配置文件详解
- 使用squid搭建http代理的方法
- C#设计模式编程中运用适配器模式结构实战演练
- Java中用Socket实现HTTP文件上传实例
- Java Web之限制用户多处登录实例代码
- c++重载的详细总结
- 备份和恢复Windows IIS服务器设置
- Mysql主从复制作用和工作原理详解
- Go中http超时问题的排查及解决方法
- vue组件通信传值操作示例
- nodejs 生成和导出 word的实例代码
- 实战操作易语言机读文本软件
- Retrofit之OKHttpCall源码分析