返回地址【数据结构】

小问题?
1.我们是如何根据地址值来找到我们对应的数据的?
详细陈述一下:当我们开辟一个整数类型,取名为a,假设地址空间是从数值为2000进行存储,并且我们假设整形占用4个字节,那么我们在内存中需要的空间就是2000~2003,共4个字节,同时我们定义一个整形的指针为p,p存储的地址就是a的地址,我们写作是int p;p=&a;就相当于是p==2000,这如何来确定地址空间当中所存的具体数值呢?我们用int 2000来进行确定的,我们开始假设的是整形占用4个字节,并且起始地址是从2000开始的,那么我们的计算机从2000开始连续读取4个字节就会得到我们想要的数据,由此可见,我们的真实数据是有数据类型以及开始的首地址来进行存储的
2.我们都知道数组名代表了元素的首地址,那么我们来进行数组的使用规则进行理解一下,int[]a={};int
p=a;p==2000;
(p+1)==a[1]
我们来仔细的谈一谈此时的加1操作,这里就与数据的基类型是有关的,加1就是加一个基类型的字节数,同样我们返回的值为某个元素的第一个首地址,不会返回整个字节数地址
在这里插入图片描述
在使用malloc和realloc以及free的时候一定是要有前面的有文件的,也就是<stdlib.h>
也要知道宏定义,Init_size代表的是初始的大小,也就是一开始我们需要开辟的空间大小,这里有一个要求,初始的空间不能太大,也不能太小,太大了会比较浪费,太小了就需要后期的扩充函数,而一旦使用到后期的扩充函数就会涉及到两个问题,第一就是申请成功,第二就是申请不成功,然后再转向其他的仓库进行,会比较浪费时间,最好就是不用后期的扩充函数,一次到位,如果我们能够找到一种方法,能确定最初所要申请空间的大小,那么我们就不用后期的扩充函数,从而避免了时间的浪费,但是这个问题是否就能够由我们来解决呢?有待考察,而Increace_size代表的是申请空间的时候每次申请的内存空间我们进行的大小的定义,是由我们自己进行定义的,与系统是没有关系的,是由relloc进行决定的,
小插曲:
1.Elem就是所有数据类型的一个抽象概括
2.数组当中的数值,开始申请了一个空间大小,使用的函数可以是动态函数malloc函数,
3.int
a就是代表着指针类型的变量起名为a,没有实际的内存空间,我们必须用函数malIoc来进行空间的开辟,
4.有了指针类型的地址,我们就要联想到他是否有真正的内存空间,如果没有,那么我们就要进行malooc函数来进行空间的开辟
在这里插入图片描述 当我们申请空间的时候,只是申请了一个内存地址,也就是elem*的值被赋予定义,就相当于我们有了一个仓库,找到了我们接下来做事情的一个地方,但是此时仓库是空的,也就是数据为0个,没有元素,而此时的sIze就是指仓库的大小,Len为存了多少个元素初始值为0,也就是没有参与元素,而下面的size是仓库的大小,我们看一下判断条件,如果地址空间为空,图上显示的是为null时,就是开辟空间失败,是硬件的问题,