都说C语言的指针很难,用不好很容易出错,那为何还要用指针呢?你能举例说说吗?
1. 分析问题
整个问题,从提问者的角度,等价于两个子问题:
子问题1:为什么C语言要引入指针?
子问题2:指针怎么才能用好?
2. 子问题1的分析
现在来分析子问题1。要回到这个问题,要回顾计算机程序的执行原理:
现代通用计算机基本上都遵循冯·诺依曼结构。
冯·诺依曼结构的精髓在于:将计算机指令与数据一视同仁,都放入内存中处理。所以计算机程序执行的过程,实际上就是不断从内存中取出指令,再从内存中取出数据,指令作用于数据得到结果,结果再放回内存的过程。
从这个过程可以看出,程序的整个运行都是围绕内存进行的。既然指令和数据都放在内存中,那么执行哪条指令、取哪个数据、结果放到哪里,都需要精确定位内存的具体位置。
C语言作为开发Unix操作系统而创造出来的编程语言,天然需要具备操作系统底层的能力;而从上述程序运行的视角来看,所谓的系统底层能力,核心在于对内存位置的定位能力。C语言用于对内存进行定位的“武器”就是指针。
一言以蔽之:C语言之所以引入指针,是由C语言诞生的历史背景和所要承载的历史使命决定的——开发操作系统,要用强大的操控系统底层的能力,系统底层的核心是对内存的定位操作。
3. 子问题2的分析
很多同学被指针搞懵的原因在于:大陆的C语言入门的教材基本上都是谭浩强的《C语言程序设计》,这本教材讲述指针过于繁琐,没有抓住指针的本质。
指针的本质就是内存地址。
记住这一点之后,你就可以游刃有余了。以下笔者对初学者最容易晕菜的几个概念进行最凝练的解释。
3.1 多级指针
一级指针就是一次性指向目标内存地址、二级指针就是分两段指向最终目标地址(第一级相当于先指向一个“中间驿站”,第二级再从“中间驿站”指向最终目标地址)……依次类推,这样哪怕给你一个N级指针,你也不会懵逼。
3.2 指针数组与数组指针
说白了,考的并不是计算机知识,考的是语文知识:)
两个术语都是偏正短语:前者的被修饰词(中心词)是数组,后者的被修饰词(中心词)是指针;前者这个数组里的每个元素都是指针,后者这个指针指向的是一个数组(一片连续的内存区)。
你想引用一块数据,数据内容不确定,只知道数据存放地址,怎么引用最方便又灵活?当然是使用指向该数据的地址了。这是最常见的一种情况,实际上在C语言里指针的用法非常多,多重指针也常见,生成的机器码简洁高效。学习C语言指针是必不可少的
C语言指针难学吗?
指针在数据结构方面有很大作用, 指针一直是学习C/C++语言的一个重点与难点。只有熟练地掌握了指针,才可以说掌握了C语言,C语言的最吸引人的地方也是指针,因为它可以任意地操作内存,编写程序中有着极大地自由空间,因此,也有人说指针是C语言的灵魂。而且指针也是各大公司面试程序员的必考内容。C语言指针只有自己学过,才知道并没有你想象的那么难,当然要想熟练掌握运用指针也需要训练理解。
大家都知道指针是C语言中的精粹,学好了指针基本就等于学好了C语言,它能直接对物理地址进行访问,具有双重功能。C语言功能强大的主要原因就是具有指针结构。
指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。学好指针对C的学习有很重要的意义。
以前学习C语言的时候,看的是“ 如鹏网 ”的视频教程——《C语言也能干大事》系列,在C语言开发网站中,有一节是专门用来讲解指针的,讲的比较透彻,理解起来也挺容易的,具体的可以到如鹏网官网上去了解一下;
有问题随时提问,老师实时在线答疑,口碑不错,基本上都是慕名而去的;
应该这么说,指针是c的核心,它基础学习并不复杂,但是可以用的非常灵活,所以它的复杂取决于用的人如何使用它,学习基础后建议去看一些经典的代码,里面大牛用的非常巧妙却又具备非常清晰的逻辑

