本文共 1664 字,大约阅读时间需要 5 分钟。
是否你也曾上学时刚接触指针时理解和运用起来一脸懵,而书上的概念却有生涩难懂?其实当你完全掌握理解了指针的时候,这些问题都将迎刃而解,无论多级指针都可以褪去语法糖看其本质。(其实并没多级指针这概念,只是为了让人们更好理解才附加的)。
有些东西理解起来可能很轻松,但表述出来确又是一回事。这也是很多书对指针的解释让人很难理解的原因。不过没关系,相信看完以下内容各位对指针能有新的理解,废话不多数看下直奔主题。
想要理解指针光从指针定义来看是不够(有人可以很好的运用指针,但本质了解确实模糊的),还需要了解一些其他的知识,尤其是对内存运用的理解。
人类所有的灵感都源于生活,其实内存也不例外。计算机中要存储东西,利用的正式生活中的思维。
计算机的内存是一块用于存储数据的空间,由一系列连续的存储单元组成。内存你可以类比为一个快递中心的仓库,
仓库中放着各种存放快递的盒子 , 盒子的大小可以不一样(大小便是由普通变量类型控制的)。假如我们需要去仓库取出自己的快递,我们可以给每个盒子编上一个不同的号码代表不同的身份。这号码也就是内存中的地址,在内存中它是连续的,唯一的。
盒子中我们可以放快递,当然也能放写上地址号的字条,通过这样间接寻找同样能找到快递。这就是所谓的指针的作用(下文继续解释 指针的作用)。
几乎所有的书都说指针是存储地址的。有人赞同,有人觉得还不够深刻(这里就看大家自己的理解咯)。下面我们就来分析下原因了,其实上图也已经体现的很明显了。
联想: 现实生活中存储东西,东西有不同。计算机中存储的数据同样有不同。
在计算机中,
整数对应着整型变量。 浮点数对应着浮点型变量。 字符对应着字符型变量。 同样,指针对应着指针型变量。导致不同变量的原因: 同一种变量无法便是不同的东西(一 一对应性)。
变量三要素:
大小 类型 作用域我们常见的普通类型由int,char,double,float等类型,说白了不同类型,都是为了更方便你找到你需要的东西。
需要知道在内存中存储普通变量,即int a,float b,double c,char d这些都是以地址存储的(编译器完成),a,b,c.,d这些都是为了给人看清楚分辨的。
此处粘贴一点点汇编代码证明:
我们再回到这张图
重点清楚两点概念,区分变量身份
<1>指针类型是 int* (int可用任何普通类型替代,如char,double等) <2>指针是用来存放地址间接引用别的变量(包括指针)实例
int* a int** b int*** c 为了好理解,我们改写为下面的写法(编译效果一样)int* a //变量为a int* *b //变量为*b int* **c //变量为**c
作用:这样在&解引用的时候就能很清楚的理清变量对象。
欢迎有不同理解的朋友交流,这篇就到理论为止吧,后面有机会再写讲讲指针的各种使用姿势吧。(主要是理解的想要简单表述成大家能很好理解的实在太纠结怎么写了,脖子挺不住了…告辞)
转载地址:http://kke.baihongyu.com/