国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言 動態(tài)內(nèi)存分配詳解

2020-01-26 14:02:43
字體:
供稿:網(wǎng)友

C語言 動態(tài)內(nèi)存分配詳解

動態(tài)內(nèi)存分配涉及到堆棧的概念:堆棧是兩種數(shù)據(jù)結(jié)構(gòu)。堆棧都是數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu),只能在一端(稱為棧頂(top))對數(shù)據(jù)項進行插入和刪除。

棧(操作系統(tǒng)):由操作系統(tǒng)自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

堆(操作系統(tǒng)): 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收,分配方式倒是類似于鏈表。

/在C語言中,全局變量分配在內(nèi)存中的靜態(tài)存儲區(qū),非靜態(tài)的局部變量(包括形參)是分配在內(nèi)存的動態(tài)存儲區(qū),該存儲區(qū)被稱為棧。除此之外,c語言還允許建立內(nèi)存動態(tài)分配區(qū)域,以存放一些臨時用的數(shù)據(jù),這些數(shù)據(jù)不必在程序的聲明部分定義,也不必等到函數(shù)結(jié)束時才釋放,而是需要時隨時開辟,不需要是隨時釋放。這些詩句臨時存在一個特別的自由存儲區(qū),稱為堆區(qū)。

系統(tǒng)提供了四個庫函數(shù)來實現(xiàn)內(nèi)存的動態(tài)分配:

(1)malloc(size) 在內(nèi)存的動態(tài)存儲區(qū)中分配一個長度為size的連續(xù)空間。
(2)calloc(n,size) 在內(nèi)存的動態(tài)存儲區(qū)中分配n個長度為size的連續(xù)空間。
(3)free(p) 釋放指針變量p做指向的動態(tài)空間。
(4)realloc(p,size) 將指針變量p指向的動態(tài)空間大小改變?yōu)閟ize。

舉個栗子:

#include<stdio.h>#include<stdlib.h>int main(){  void check(int *);  int *p1, i;  p1 = (int *)malloc(5*sizeof(int));  for ( i = 0; i < 5; i++)   scanf("%d",p1+i);  check(p1);  getchar();  getchar();  return 0;}void check(int *p){  int i;  for (i = 0; i < 5; i++)  if (p[i] < 60) printf("%d", p[i]);  printf("/n");}

程序沒有定義數(shù)組,而是開辟了一段動態(tài)自由分配區(qū),輸入數(shù)字時,按照地址復(fù)制給動態(tài)數(shù)組的5個元素,p1指向第一個整型數(shù)據(jù),調(diào)用check函數(shù)時,p1作為實參傳遞給形參p,因此可以理解為形參p和實參p1公享一段動態(tài)分配區(qū)。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 奉节县| 商水县| 金溪县| 凌云县| 重庆市| 嘉黎县| 永清县| 德令哈市| 台南市| 新宁县| 纳雍县| 吉林省| 瑞安市| 宁德市| 邹城市| 洪湖市| 平湖市| 吴忠市| 尤溪县| 隆林| 泸溪县| 两当县| 大港区| 隆德县| 营口市| 万盛区| 西丰县| 奈曼旗| 云霄县| 晋城| 原平市| 泾源县| 武城县| 襄垣县| 旌德县| 时尚| 民县| 东莞市| 教育| 札达县| 湘乡市|