本文为大一时所写的文章(2017/4/16),文笔还很生疏,在很多问题上认识不深,算是在学校的微信公众号上的一个编程探究模块上的投稿,本人当时也参与了本模块的维护和管理。补档。
指针是C语言的灵魂,是C语言嵌入式开发的基础,指针通过对地址的直接访问使C语言有了很强的可移植性,C语言才能在日新月异的计算机语言的更迭中,确立很高的地位。
在第一期里我们讨论过二维函数的动态分配,其中方法二就是使用了指针的方法
(指针的指针)用指针实现可以显著减少内存的浪费,让程序运行更加健壮(原话),为什么能显著减少内存的浪费呢,这一期,我们就来聊聊这个问题及其相关知识。
为什么要叫做指针呢?
按本人的理解,指针变量类似于一个机械手臂在一段很长的档案柜或者很大的档案室里查找档案。一般的查方法像是一行一行一列一列的逐个查找,这样做浪费精力也浪费时间,而机械手臂就不同了,直接从需要查找的档案编号(地址)查找访问,简单快捷,但是也需要很强的逻辑思维能力,在遇到指针的时候不能乱,遇到指针的指针就更不能乱了,必要时可以画图来辅助自己理解指针,多加练习,就会熟悉指针并且喜欢使用她。
声明一个指针变量的基本形式是:数据类型 *变量名
例如声明一个返回值为int型的指针变量应该是 int *p ,这时指针便可以储存一个整型变量的地址了,如图所示:
他们内在的关系可以这样表示(假设p的地址是2B,x的地址是9S)
p在这个时候就存放了x的地址,对p进行操作可直接改变x的值,p和x等价,同时对他们进行输出答案都是Q。
这对于使用用户函数来写程序的场合来说,实在是太方便了,因为C语言是按值传递的,所以在使用函数的时候形参是实参的副本(也就是说系统将实参的值拷贝一份给形参),如果直接将原来值传递到函数中,会导致程序冗杂,占用不必要的内存,增加运算时间,但如果在传递的时候只传入地址呢?也就是说不管多大的实参,通过指针传递地址,她的大小始终就只有是实参的数据类型的大小
例如:
这时用户函数change中传递的形参char就只有一个字节,而不是char【20】的二十个字节。(需要注意数组名本身就是个指针,指向数组的首地址)
使用了指针,就可以优化程序运算过程,使程序更加美观简洁。
使用指针对程序的优化有至关重要的作用,真正掌握了指针,才能说你真正掌握了C。
当然指针的作用不仅仅在于此,如开头所说,指针是C语言的灵魂,它的作用还有很多很多,几乎在任何情况下都可以用到,在这里我们来看一个我写的简单的用户函数+指针的使用实例。
N进制转化为10进制的小程序
结果为:
通过偏移量来访问数组内容的就是通过指针来实现,对地址进行加减一的操作来实现数组的内容改变。
可能还有人会问,指针还有一些诸如指针数组,指针的指针等一些
进阶知识没有讨论到,这个大可放心,指针相关的进阶知识我将会在下一期的“文件”中和大家一起探讨。
因本人能力有限,程序难免出现错误,请各位同学斧正!