C语言教程07指针
Posted ITbear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言教程07指针相关的知识,希望对你有一定的参考价值。
嗨喽!大家好,很长一段时间没有更新了,其实最近一段时间都在学习前端的相关知识,所以指针篇的学习也鸽了很久。
说到这里的话我就顺便和大家分享一下最近的心得体会。其实总结成四个字就是边学边练,这也是我一直以来强调的自学方式。很明显的一点,尤其是在前端网页开发的时候,知识点都是很容易理解却又繁多的,比如说html的标签这么多,我们不可能死记硬背,所以只能让自己多练习多使用,不会的再去查,说到底就是个熟能生巧的过程。
大家应该都知道,外界的培训学校,培训一段时间后就可以参加工作任务,其实也不过是实践得多些。但也有个问题,那就是培训学到的是实战经验,不一定能学到底层原理,就像是学习一门生存手艺一样,这也是培训完就能直接工作的原因,目的不同,学习方向不同,而大家目前阶段就是在学习基础知识,如果再加上一些实战项目,就能达到高效的学习,不管是实战经验还是底层知识都能快速提升,这都取决于大家自身的学习方式。
废话就到这,接下来我们就来会一会今天的主角——指针。这也应该是大家学习C语言最头疼的一个部分了。
那么,什么是指针呢?
我们知道,编程的过程中计算机会为变量分配一定的内存,而我们操作变量其实就是在修改内存中的信息,而有时候我们也会遇到一个问题,我们如何去找到这个存储变量的内存呢?
我们依旧用酒店打比方。有这样一个3楼的酒店,每一楼4个房间,我们知道每一个房间编号,现在大家是不是一眼就能看出房间所在的位置。
那我如果不用数字编号大家还能看出来吗?之所以能看出来无非就是因为酒店房间的编号与位置是有关联的。而指针就是这样一个功能。在我们不知道位置的情况下帮我们记录位置。
就像前台一张海报上写着每一个房间的具体位置。
如:int *arr[5];
区别于它的是数组指针,指的是一个数组类型的指针,指针指向一个数组,
如: int (*arr)[5];
既然是变量,我们就用之前学习变量的方式来学习指针。
和变量一样,指针类型的变量也是需要声明定义的,且必须在你使用该指针之前定义好。定义的方法类似,只是比普通变量多一个“*”符号。
类型 *变量名; ,如:
Int *p;
这样我们就定义了一个名为p 的整型指针,其他类似。
我们先看代码:
下面看运行结果:
在指针P加2后我们发现其指向的变量的内容与数组里arr[2]的值相同,于是我们大胆推测,这个指针就是数组本身,其实也确实如此。
指针P 进行加操作实际上是以它指向的数据类型的内存大小为单位,也就是说我们加2后就是往后延伸了两个int类型的大小,而arr数组就是一组连续的int类型内存。
实际上我们使用指针作为数组能够比数组更加灵活,并且效率更高,但另一方面,用指针实现的难度会比数组本身难。
如果大家学过数据结构中的链表的话就会更有体会,链表的强大与便捷令人难以割舍,静态链表可以用数组实现,而动态链表的实现通过指针实现,其难度也令人头疼。
下面我会用代码和运行结果演示,结果相对较为复杂,希望大家能够理清结果。
如果大家理清了上述代码,其实就会发现指针的指针不论多么复杂,只要一层一层剥离开就会得出结果,接下来我带着大家一起理一遍。
当(*p_p_num)的值就等于p_num的值后,(**p_p_num)的值就等于(*p_num)的值,即num的值5。到此结束。
为了方便大家理解,特意用下面这个模型再演示一遍。
好了,指针的全部内容基本上都在这里了,当然了,有指针的指针那就会有指针的指针的指针。
反正不管如何,只要掌握了上述的方法,相信以大家的聪明才智都是能够解决的,还有一点没提的是结构体指针,而结构体是我们下一篇要学习内容,所以在这里就不展开讲了,等大家学会结构体后,结合这一篇的指针内容,结构体指针自然也就掌握了。
在C语言中指针确实是最难的一部分之一,所以需要大家好好去理解和消化,还是那么一句话,大家可以先自行解决,若有问题欢迎随时来询问,后台留言或者微信等方式联系我都是可以的,那么我们下一篇结构体再见!
以上是关于C语言教程07指针的主要内容,如果未能解决你的问题,请参考以下文章