小問題?
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={};intp=a;p==2000;(p+1)==a[1]
我們來仔細的談一談此時的加1操作,這里就與數據的基類型是有關的,加1就是加一個基類型的字節數,同樣我們返回的值為某個元素的第一個首地址,不會返回整個字節數地址
在使用malloc和realloc以及free的時候一定是要有前面的有文件的,也就是<stdlib.h>
也要知道宏定義,Init_size代表的是初始的大小,也就是一開始我們需要開辟的空間大小,這里有一個要求,初始的空間不能太大,也不能太小,太大了會比較浪費,太小了就需要后期的擴充函數,而一旦使用到后期的擴充函數就會涉及到兩個問題,第一就是申請成功,第二就是申請不成功,然后再轉向其他的倉庫進行,會比較浪費時間,最好就是不用后期的擴充函數,一次到位,如果我們能夠找到一種方法,能確定最初所要申請空間的大小,那么我們就不用后期的擴充函數,從而避免了時間的浪費,但是這個問題是否就能夠由我們來解決呢?有待考察,而Increace_size代表的是申請空間的時候每次申請的內存空間我們進行的大小的定義,是由我們自己進行定義的,與系統是沒有關系的,是由relloc進行決定的,
小插曲:
1.Elem就是所有數據類型的一個抽象概括
2.數組當中的數值,開始申請了一個空間大小,使用的函數可以是動態函數malloc函數,
3.inta就是代表著指針類型的變量起名為a,沒有實際的內存空間,我們必須用函數malIoc來進行空間的開辟,
4.有了指針類型的地址,我們就要聯想到他是否有真正的內存空間,如果沒有,那么我們就要進行malooc函數來進行空間的開辟
當我們申請空間的時候,只是申請了一個內存地址,也就是elem*的值被賦予定義,就相當于我們有了一個倉庫,找到了我們接下來做事情的一個地方,但是此時倉庫是空的,也就是數據為0個,沒有元素,而此時的sIze就是指倉庫的大小,Len為存了多少個元素初始值為0,也就是沒有參與元素,而下面的size是倉庫的大小,我們看一下判斷條件,如果地址空間為空,圖上顯示的是為null時,就是開辟空間失敗,是硬件的問題,