對「c指標和記憶體分配」的一點小見解

2021-09-17 08:45:09 字數 1788 閱讀 6214

malloc分配記憶體,一般首先定義乙個指標,然後將malloc函式返回的位址賦予該指標

u8 a;

u8 *p;

p = &a;

p = malloc(ram,1);

什麼時候需要使用malloc申請記憶體?

定義了指標變數之後,要想使用它,(當然我們不是也不能因為定義了所以才使用它,而是應該因為要使用它所以才定義它)就得讓它指向具體的記憶體,讓它指向記憶體有兩個辦法:

1、就是用p=&a;或p=0x12324121這樣的賦值語句為指標變數p賦值,即讓其指向乙個具體的記憶體位址(這個位址處的變數可能就是a),然後就可以引用指標來幹事情了,例如

「*p= 5」就是讓p指向的這個u8資料等於5;

2、就是使用malloc記憶體分配函式來讓p指向乙個具體的記憶體空間,p = malloc(ram,1);這個方法和上邊的那個是不一樣的,不一樣的地方在於,上邊的方法先定義乙個變數a,再

將這個變數a的位址賦予這個指標變數p,這個變數a的位址在賦予這個指標變數p之前就是是確定的(當然,在這兒,我們使用「*p=5」相對於用「a=5」為a賦值來說有點無厘頭,

之所以顯得無厘頭就是因為a的位址已經在定義a的時候確定了,我們完全可以直接為a賦值,而沒必要非說向&a指向的記憶體中填5,什麼時候才不會顯得無厘

頭,就是只定義了乙個指標並對其賦了乙個數字值的時候,就類似下邊的32暫存器程式設計中一樣,只是說tim3的值是tim3_base,沒說tim3指向哪個變數,這時,就可以有理由

的引用tim3這個指標了,tim3->arr 、tim3->psc、tim3->dier)。

而第2種方法,是不確定的,隨機的,這個原因,就要看malloc申請記憶體的機制了,這個malloc函式給我的感覺就是,在記憶體中找一塊沒有被用過的記憶體區域,看看引數中需要申請多少,

然後就擷取多少,擷取完之後把這一段記憶體的首位址返回,同時,標記這一段記憶體已經被使用(直到free函式將其釋放,才能再次被申請)。

所以綜上所述,乙個指標變數,只要沒有經過第一種方法直接為其賦值,那他這個指標變數必然是用來(「用來」而不是「要去」,我的認知中是「被動承接不是主動去要」)承接

malloc申請到的記憶體的首位址的,然後才能使用,否則其什麼都不指向,用乙個形象一點的例子說明就相當於,你是指揮官,命令士兵說,「往某某城市(某某城市相當於指標)發

射一枚飛彈」,然後士兵肯定要知道這個城市的經緯度,假如你沒告訴他經緯度,這個「某某城市」只是個能夠代表任何經緯度的乙個名詞,無任何意義,那此時這個士兵肯定是懵逼

的。此時,你要告訴他具體經緯度了,用第一種方法,就是直接告訴他東經113:42北緯34:44,第二種,就相當於士兵就在那守著,你告訴他「某某城市需要轟炸一下」,然後你給他

乙個u盤,士兵不需要知道這個u盤中儲存的具體經緯度,也不需要知道轟炸的是乙個城市還是乙個島嶼,他只需要把這個u盤插在發射裝置上,這個「某某城市」的指標就被賦予了

u盤這個malloc申請來的位址了。

#define periph_base           ((uint32_t)0x40000000) /*!< peripheral base address in the alias region */

#define apb1periph_base       periph_base

#define tim3_base             (apb1periph_base + 0x0400)

#define tim3                ((tim_typedef *) tim3_base)

typedef struct

tim_typedef;

void tim3_int_init(u16 arr,u16 psc)

對工作的一點見解

黨務文字秘書主要負責起草黨委的稿子報告 計畫總結 綜合性重要檔案 綜合性重要文稿等。但是,這個崗位絕不僅僅是處理文字工作那麼簡單,他又是黨委書記的 參謀助手 是上情下達 下情上傳 承上啟下的重要環節,要做好秘書工作,不斷提高為領導服務的質量和水平,對各方面的素質都提出了很高的要求,對我們政治上 思想...

我對網頁設計的一點見解

我對網頁設計的一點見解 ryansoft 原作 關鍵字我對網頁設計的一點見解 出處首先說明一點,我不是專業的網頁設計人士,我是個程式設計師,不過接觸網頁已經有6年了,從一開始用html寫網頁到現在用dreamware來填網頁,多多少少也有半點見解吧.今天在藍色理想看到兩篇值得我收藏的文章,感覺真的不...

單例模式的一點小見解

還是很心煩,一面試就問單例模式,單例模式的。那麼只能看看啥是單例模式 當這個類的物件在多個地方建立的時候,使得內部的方法多次呼叫,但是希望只要乙個物件操作這個方法,或者不希望多個地方同時呼叫這個方法,需要保持這個方法的單一性質,就用單利模式吧。那麼單例模式怎麼實現的呢,關於這個網上有2種,3種,5種...