日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

21天学通C语言-学习笔记(10)

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 21天学通C语言-学习笔记(10) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

高級應用篇

堆管理(what?)

:與棧平級

動態內存管理

  • 分配內存空間

    malloc 函數可以從堆上獲得指定字節數的內存空間,其函數聲明如下:void * malloc(int n); 其中,形參 n為要求分配的字節數。該內存空間未經初始化,所以我們必須要召喚 memset 函數。

    memset 函數的函數聲明如下:void * memset(void * p,int c,int n); 其中,p為要清零的內存空間的首地址,c 為要設定的值,n 為被操作的內存空間的字節長度。 如果要使用 memset 清0,變量 c 的實參要為 0。

  • 釋放內存空間

    從堆上獲得的內存空間在程序結束后,系統不會自動將其釋放,否則,會導致內存泄漏。free 函數可以實現釋放內存的功能。其函數聲明為:void free (void * p); 由于形參可以接受任意類型的指針實參,所以 free§; 就可以釋放指針 p 指向的內容,而指針的值仍然指向原來指向的地方,然后將指針置為NULL。需要在 return 前加入以下兩行語句:free ( p ); p = NULL;

  • calloc 分配函數:與malloc 函數相同點在于都從堆上分配內存,不同點在于 calloc
    函數得到的內存空間是經過初始化的,其內容全為 0 。由于其聲明如下: void * calloc(int n,int size);
    所以calloc 函數適合為數組申請空間,可以將 size 設置為數組元素的空間長度,將 n 設置為數組容量。同樣,程序結束前要釋放
    calloc 函數分配的內存空間。

  • realloc 函數:相比以上三種,realloc 函數不僅可以分配內存,而且可以釋放內存:
    realloc(p,0)。函數聲明如下:void * realloc(void *p, int n); 其中,指針 p
    為指向堆內存空間的指針,即由上面三種函數分配空間的指針。realloc 分配的空間與 malloc 函數一樣未經初始化。

  • 動態數組:C
    語言的內建數組屬于靜態數組,程序運行前就必須確定其數組容量。但是,有的數組需要的容量在程序運行后才會知道;所以我們來借助堆管理來實現動態數組。方法是根據需求,使用分配函數在堆上獲取指定大小的內存空間,最后將這塊內存空間的起始地址作為該數組的首地址。由于動態數組是在堆上獲取的內存空間,所以在程序結束時,必須手動釋放內存。

  • 小結:在使用 malloc 函數、calloc 分配函數、realloc 函數獲取堆內存時,務必要檢查執行結果。

    總結

    以上是生活随笔為你收集整理的21天学通C语言-学习笔记(10)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。