指令
描述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...