在c語言中,儲存區大致分為5類
#include int *func()
int main(int argc, const char *ar**)
#include #include int *func()
int main(int argc, const char *ar**)
#include #include int g = 100;//全域性變數儲存在全域性區,程式結束後被釋放。
int *func()
int main(int argc, const char *ar**)
#include #include int main(int argc, const char *ar**)
#include #include char *func()
int main(int argc, const char *ar**)
malloc()
函式向系統申請分配size
個連續的記憶體空間,返回值為void*
。void*
屬於指標型別,不代表確切的指標型別,程式設計師根據需要轉換成自己需要的型別。
void *malloc(unsigned int size)
#include #include #include int main(int argc, const char * ar**)
陣列分配空間
#include #include #include int main(int argc, const char * ar**)
for(int i=0; i<10; i++)
free(arr);
arr = null;
// 分配2行3列的二維整型陣列
int (*p)[3] = (int (*)[3])malloc(sizeof(int)*2*3);
for(int i=0; i<2; i++)
}for(int i=0; i<2; i++)
}free(p);
p = null;
// 分配2行255列的二維字串陣列
char (*c)[255] = (char (*)[255])malloc(sizeof(char)*5*255);
free(c);
c = null;
return 0;
}
結構體指標
#include #include #include typedef struct student student;
int main(int argc, const char * ar**)
結構體陣列
#include #include #include typedef struct student student;
int main(int argc, const char * ar**)
其他記憶體分配函式
// 分配n個size大小的空間,需使用free釋放記憶體。
// 與malloc不同的是calloc申請的記憶體空間會初始化成0
void * calloc(unsigned n, unsigned size)
#include #include #include int main(int argc, const char * ar**)
printf("-------------------------\n");
int a[size] = ;
int result = memcmp(arr, a, sizeof(int));
printf("result is %d\n", result);
free(arr);
arr = null;
return 0;
}
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
c 動態記憶體分配
c語言中提供的動態記憶體分配為了解決陣列的靜態的分配方式的問題 即陣列大小必須在定義時指定,程式在執行時不能動態改變陣列的大小 在標準庫中提供了三個動態記憶體分配的函式供程式呼叫,下面將分別對這三個函式進行介紹 1.void malloc size t size malloc 在分配一段連續的記憶體...
C 動態記憶體分配
c 動態記憶體分配 c c 定義了4個記憶體區間 區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆 heap 區或自由儲存區 free store 堆的概念 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確...