指针与引用
指针类型,指针变量,指针。有时候我们把三个都叫做指针于是乎如果对于一个不是很懂指针的人来说,当说到指针时头就很大,因为他很难区分此时说的指针到底是以上那个东西。其实这三个的存在是有顺序的:先有类型,然后才有变量,有了变量然后我们可以往里面存东西。变量的值要存储在内存中,那我们如何取这个值呢?第一种:用变量名;第二种:用内存单元的地址(编号)。
基本概念
-
类型
类型决定了数据的意义(应该以何种方式来解读它),以及可以在数据上执行的操作。类型也说明了以这种类型为蓝图创建的对象所占的存储空间的大小。
-
地址
内存单元的编号,可以看作是门牌号。每8bit称作一个byte,内存单元以字节为单位进行编号。
-
变量(对象)
变量可以看作是一段连续内存空间的别名。把内存的每一个byte当作是一个一个的小的储物箱,有时若是我们的东西太大了以至于一个储物箱放不下,于是我们就需要使用多个储物箱(一般都是连续的)来存放我们的东西,那么我们这个由几个小储物箱组成的大储物箱的编号应该是什么呢?
答案是: a d d r = m i n { b o x 1 , b o x 2 , b o x 3.... } addr = min\lbrace box1, box2, box3....\rbrace addr=min{ box1,box2,box3....}就是所用的所有存储物箱的地址(编号)集合中最小的那一个。
即采用多字节存储的对象,它的地址是他所用地址集合中最小的那个地址。下图中:变量a
跨越了地址为:0xFF00-0xFF03的4个存储存储单元。那变量a
的地址其实是:0xFF00
我们可以将变量理解为在储物箱上贴了一个标号,方便我们自己使用。比如说,占用了8byte的编号(地址)为:0xFFEE01的储物箱,我们将其称为——Mike。这样显然方便了我们人类使用,但是对于计算机而言,它还是使用编号去寻找我们的储物箱,因为这样更不容易出错也没有歧义。
上面我们说了跨域多个连续字节的变量的地址问题,那么还有一个问题就是它的值该如何放进去呢?
测试你的硬件所支持的的大端(MSB)还是小端(LSB),一般而言intel桌面级处理器所使用的是LSB(下面给出了测试代码)。对于一台机器采用是MSB还是LSB在两个进行通信的时候一定要协商好,否则通信格式不一致出现意外。
//也可采用union来测试
#include <iostream>
using namespace std;
int main