今天在整理收藏夹的时候,又看到了这两篇非常不错的文章,关于指针和引用的,我就不翻译了,文章很简单,不过把其中我觉得很有意思的两部分结合我的理解希望说的更清楚,假定你读这篇文章之前已经知道指针,但是不是很清楚其中的部分。
首先是关于指针的一个直观的一个认识.
上面这段代码,声明了一个指针,和两个整数,指针指向第一个整数,然后输出结果(每个人的输出结果不一样)是:
这张图是这几个变量的内存分布图,上面一排是内存地址编号,正对我们的是该处的值
指针pPointer这个变量从最左边0xbff43314这个内存位置开始,占用了四个字节,这个一个指针占四个字节,大家都知道的,这个变量的值是一个地址,也就是他的指向地址。
pPointer 所指向的地址呢,是一个short int 类型的值所在的位置,在这里就是我们的twoint,twoint在内存中呢,是从0xbff4331a开始的,也就是说,我们的pPointer指向了twoint所在的地址,
注意,看一下左边四个方块前面的二进制数,转换成16进制就是0xbff4331a了
因此,取指针所指向的值就是35698了。指针本身的值则是0xbff4331a,指针所在的位置是0xbff43314。
参考文章:C++ : Understanding pointers
另一个呢是关于引用的实现原理
大家都知道,引用就是别名,比如下面这段代码
输出结果肯定一目了然,其中的原理想过没
其实,引用和指针的工作原理类似,引用变量存储了其引用变量的地址,看图
refNumber这个引用变量在内存中的值就是number这个被引用变量的地址.但和指针不同的是,引用是对一个地址的命名常量,因此,必须在声明引用的时候初始化。并且取值的时候,也不需要像指针一样加*,而是当作一个普通变量,直接用就行了。
参考文章:Pointers, References and Dynamic Memory Allocation