C語言 動態記憶體分配__C語言

來源:互聯網
上載者:User

動態記憶體分配涉及到堆棧的概念:堆棧是兩種資料結構。堆棧都是資料項目按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項目進行插入和刪除。
棧(作業系統):由作業系統自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。
堆(作業系統): 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收,分配方式倒是類似於鏈表。
在C語言中,全域變數分配在記憶體中的靜態儲存區,非靜態局部變數(包括形參)是分配在記憶體的動態儲存裝置區,該儲存區被稱為棧。除此之外,C語言還允許建立記憶體動態分配地區,以存放一些臨時用的資料,這些資料不必在程式的聲明部分定義,也不必等到函數結束時才釋放,而是需要時隨時開闢,不需要是隨時釋放。這些詩句臨時存在一個特別的自由儲存區,稱為堆區。
系統提供了四個庫函數來實現記憶體的動態分配:
(1)malloc(size) 在記憶體的動態儲存裝置區中分配一個長度為size的連續空間。
(2)calloc(n,size) 在記憶體的動態儲存裝置區中分配n個長度為size的連續空間。
(3)free(p) 釋放指標變數p做指向的動態空間。
(4)realloc(p,size) 將指標變數p指向的動態空間大小改變為size。
舉個栗子:

#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");}

程式沒有定義數組,而是開闢了一段動態自由分配區,輸入數字時,按照地址複製給動態數組的5個元素,p1指向第一個整型資料,調用check函數時,p1作為實參傳遞給形參p,因此可以理解為形參p和實參p1公享一段動態分配區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.