嵌入式C學習第三次任務

2021-10-19 02:29:33 字數 1920 閱讀 9094

指令

描述void *calloc(int num, int size);在記憶體中動態地分配 num 個長度為 size 的連續空間,並將每乙個位元組都初始化為 0。所以它的結果是分配了 num*size 個位元組長度的記憶體空間,並且每個位元組的值都是0。

void free(void *address);該函式釋放 address 所指向的記憶體塊,釋放的是動態分配的記憶體空間。

void *malloc(int num);在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。

void *realloc(void *address, int newsize);該函式重新分配記憶體,把記憶體擴充套件到 newsize。

注:void * 型別表示未確定型別的指標。c、c++ 規定 void * 型別可以通過型別轉換強制轉換為任何其它型別的指標。

在自定義陣列時,最多容納100個字元,所以可以這樣定義:int num[100];

但是,如果您預先不知道需要儲存的資料個數,可以定義乙個指標,該指標指向未定義所需記憶體大小的陣列,後續根據需求分配記憶體,如下所示:

#include

#include

intmain

(void

)for

(int i =

0; i < len; i++)if

(num !=

null

)//需要進行手動釋放,不然會造成記憶體洩漏

return0;

}

執行結果:

num[0] = 0, &num[0] = 0xaf1260

num[1] = 1, &num[1] = 0xaf1264

num[2] = 2, &num[2] = 0xaf1268

num[3] = 3, &num[3] = 0xaf126c

num[4] = 4, &num[4] = 0xaf1270

可以發現分配的記憶體空間位址是連續的

每乙個變數都有乙個記憶體位置,每乙個記憶體位置都定義了可使用&運算子訪問的位址,它表示了在記憶體中的乙個位址。

指標是乙個變數,它的值為另乙個變數的記憶體位址

指標的使用:

#include

int main (

)

指標指向結構體:

//直接

struct student

*pstu;

//後續間接

typedef

struct studentstu;

stu *pstu;

//定義了乙個指標變數,它只能指向student結構體型別的結構體變數

如果想把已經定義的結構體變數交給乙個指標,則必須用取址符&:

struct studentstu;

pstu =stu//錯誤

pstu =

&stu//正確

通過結構指標間接訪問成員值:

(*結構指標變數). 成員名結構指標變數 -> 成員名(可以管「->」叫做「箭頭」)

(

*pstu)

.name;

//或pstu-

>name;

注意(* pstu).name的小括號不能省略,成員符「.」優先順序最大,取值符「 *」優先順序在其次,去掉括號就相當於 *(pstu.name)了。

參考資料:菜鳥教程,csdn部落格

嵌入式學習第三次作業

void calloc int num,int size 在記憶體中動態地分配 num 個長度為 size 的連續空間,並將每乙個位元組都初始化為 0。所以它的結果是分配了 num size 個位元組長度的記憶體空間,並且每個位元組的值都是0。void free void address 該函式釋放...

嵌入式第三次作業

在嵌入式系統的程式設計中,常常要求在特定的記憶體單元讀寫內容,彙編有對應的mov指令,而除c c 以外的其它程式語言基本沒有直接訪問絕對位址的能力。在嵌入式系統的實際除錯中,多借助c語言指標所具有的對絕對位址單元內容的讀寫能力。以指標直接操作記憶體多發生在如下幾種情況 1 某i o晶元被定位在cpu...

嵌入式技術第三次課堂筆記

今日課堂目標 嵌入式linux開發工具 vim gcc gdb make vim文字編輯器 學會使用和如何配置vim gcc編譯器 學會製作動態庫和靜態庫及使用與區別 gdb偵錯程式 設定斷點 單步執行 除錯記憶體錯誤 make工程管理器 編寫makefile檔案 首先是linux文字編輯器,vim...