关于一些原理
1 左值与右值
int a = b;
float a = 3.14f;
这两个是最简单的赋值语句,那么其中的含义是什么?
左值:左值是一个地址。
右值:右值是一个值(内容)。
如何理解?
左值是内存中的一个地址,当我们 int a;定义一个变量a时,编译器给a随机分配一个地址和一段连续的内存空间,同时因为我们定义的变量为int型,他占4Byte的内存,那么会在a的这个地址后取连续的4Byte大小的空间形成一个"容器",这个"容器"的内存空间用来存储 int 型的数据,其他数据类型可以以此类推。
右值是"容器"中的内容,也就是把这个地址按他的类型取地址空间中的内容。
这样一来,赋值语句就是各自按地址和类型取相应内存空间,左值为容器,右值为容器内的值,把值装入左值的容器中。
为什么int *p = 4000;不行?(在语法上他是可以通过编译的)
1.4000是一个非法的地址,他可能原本存有数据,或者已经被占用等情况。
2.他是一个值,我们不存在把值当做地址的情况。
所以说我们会有malloc,new函数来申请一块合法的空间。