<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天我們來學習一下C語言中的動態記憶體分配 開始學習吧
我們目前已經知道的記憶體開闢的方式有:
int val = 20;//在棧上開闢四個位元組。 char arr[10] = { 0 };//在棧上開闢十個位元組的連續空間
但是上述空間的開闢方式有兩個特點:
1.空間開闢的大小是固定的
2.陣列在申明的時候,必須指定陣列長度,它所需記憶體在編譯時分配。
顯然,這樣無法滿足有些場景的要求,有時我們所需要的空間大小隻有在程式執行的時候才知道。這時我們就需要用到動態記憶體分配了。
void* malloc(size_t size);
這個函數向記憶體申請一塊連續可用的空間,並返回指向這塊空間的指標。
現在我們知道了如何去開闢空間,接下來,我們去學習一下如何將開闢的空間釋放掉。
void free(void* ptr);
C語言提供了另外一個函數free是專門用來釋放動態記憶體的
想使用malloc 和 free 都需要引入一個標頭檔案<stdlib.h>
接下來讓我們看個範例:
#include <stdlib.h> #include <stdio.h> int main() { int num = 0; scanf("%d", &num); int *ptr = (int*)malloc(sizeof(int) * num); //判斷是否開闢成功 if(NULL != ptr) { int i = 0; for(i = 0; i < num; i++) { *(ptr + i) = 0; } } free(ptr);//釋放空間 ptr = NULL; return 0; }
void* calloc(size_t num, size_t size);
函數的功能是為num個大小為size的元素開闢一塊空間,並且把空間的每個位元組都初始化為0
malloc與calloc的區別在於calloc會在返回地址之前把申請的空間的每個位元組都初始化為0
舉個例子:
#include <stdio.h> #include <stdlib.h> int main() { int *p = (int*)calloc(10, sizeof(int)); if(NULL != p) { int i = 0; for(i = 0; i < 10; i++) { *(ptr + i) = 0; } } free(p); p = NULL; retrun 0; }
所以如果我們對申請的記憶體空間的內容要求初始化,那麼可以很方便的使用calloc函數來完成任務。
有時候我們會發現之前申請的空間太小,有時又會覺得申請的空間過大,那為了合理的使用記憶體,我們一定會對記憶體的大小做靈活調整。realloch函數就可以對動態開闢的記憶體大小進行調整
void* realloc(void* ptr, size_t size);
情況一:原有空間之後有足夠大的空間,要擴充套件記憶體就直接在原有記憶體之後追加空間,原有空間的資料不變。
情況二:原有空間之後無足夠大的空間,擴充套件方法是在堆上另找一塊連續的空間來使用,這樣函數返回的就是一個新的記憶體地址
以上就是深入瞭解C語言中的動態記憶體分配的詳細內容,更多關於C語言 動態記憶體分配的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45