动态记忆体配置---malloc函数范例.PPT

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态记忆体配置---malloc函数范例

CSIM, PU C Language * 鏈結串列 (Linked List) * 指 標 在指標類型中,兩種重要的運算子: :位址運算子,用來取得變數的記憶體位址。 * :取值運算子,用來取得指標所指向變數的內容 null 指標代表此指標不指向任何物件或函數 可用 0 來表示 null 指標。 例如: if (pi == NULL) printf(“It’s a empty pointer\n”); 可寫成 if (!pi) printf(“It’s a empty pointer\n”); * 動態記憶體配置---malloc函數 動態記憶體配置指的是在執行階段才向作業系統要求配置記憶體空間。 在C語言中,每次呼叫 malloc()函數,就會取得一塊可用的記憶體空間。 malloc函數配置失敗時會傳回一個空指標。 語法: 指標變數=(指標變數所指向的型態 *) malloc(所需的記憶空間) 將malloc()所傳回的位址強制轉換成指標變數所指向的型態 * 動態記憶體配置---malloc函數 例一: int *ptr; ptr=(int *) malloc(12); //配置3*4-12Bytes記憶空間,並把ptr指向它 例二: int *ptr; ptr=(int *) malloc(3*sizeof(int)); //配置可存放3個整數的記憶空間 ptr = (float*)malloc(sizeof(float)); 算出所需的記憶體空間大小 ptr = (資料型態*) malloc(sizeof(資料型態)); 型別轉換,將malloc函數傳回的 指標轉成符合配置的資料型態 配置一塊 float 的記憶體空間,指標 fp 指向此空間 * 動態記憶體配置---malloc函數 範例: #includestdio.h #includestdlib.h int main() { float *fp; fp=(float *)malloc(sizeof(float)); if(fp!=NULL) { *fp=3.14; printf(“數字=%f\n”,*fp); } else printf(“記憶體配置失敗!\n”); } * 動態記憶體配置---free函數 free函數可將已配置的記憶體空間歸還。 用法: 範例: free(指標變數); int main() { float *fp; fp=(float *)malloc(sizeof(float)); if(fp==NULL) printf(“記憶體配置失敗\n”); free(fp); } * 單向鏈結串列 單向鏈結串列是由節點(node)所串成的串列,如下圖所示。 bat ? cat ? sat NULL vat ? ptr 指向第ㄧ個節點的指標名稱(ptr)為此鏈結串列的名稱。 在單向鏈結串列中每個節點都包含兩個欄位: 資料欄位:存放資料的地方 鏈結欄位:指向下一個 node Data Link 單向鏈結串列的節點結構 * 單向鏈結串列 可使用自我參考結構(self-referential structure)來定義節點 結構,如下: data link 為指標,指向另ㄧ個node結構 ptr 定義節點結構 可使用malloc函數來建立新節點,如下: typedef struct node SN; struct node { int data; SN *link; } ; SN *ptr; ptr為node結構的指標 配置一塊記憶體空間 ptr=(SN *)malloc(sizeof(SN)); * 單向鏈結串列 程式範例: #includestdio.h int main() { typedef struct node SN; struct node { int data; SN *link; }; SN *ptr, *first; ptr =(SN *)malloc(sizeof(SN)); first = (SN *)malloc(sizeof(SN)); ptr-data=10;

文档评论(0)

ailuojue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档