" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2021年12月31日 15:54:40   作者:Alienware^  
這篇文章主要為大家介紹了C語言動態(tài)內存的分配,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

C 程序中,不同數(shù)據(jù)在內存中分配說明

1)全局變量——內存中的靜態(tài)存儲區(qū)

2)非靜態(tài)的局部變量——內存中的動態(tài)存儲區(qū)——stack 棧

3)臨時使用的數(shù)據(jù)—建立動態(tài)內存分配區(qū)域,需要時隨時開辟,不需要時及時釋放——heap 堆

4)根據(jù)需要向系統(tǒng)申請所需大小的空間,由于未在聲明部分定義其為變量或者數(shù)組,不能通過變量名或者數(shù)組名 來引用這些數(shù)據(jù),只能通過指針來引用)

在這里插入圖片描述

內存動態(tài)分配的相關函數(shù)

1)頭文件#include 聲明了四個關于內存動態(tài)分配的函數(shù)

2)函數(shù)原型 void * malloc(usigned int size) //memory allocation

  • 作用——在內存的動態(tài)存儲區(qū)(堆區(qū))中分配一個長度為 size 的連續(xù)空間。
  • 形參 size 的類型為無符號整型,函數(shù)返回值是所分配區(qū)域的第一個字節(jié)的地址,即此函數(shù)是一個指針型函數(shù), 返回的指針指向該分配域的開頭位置。
  • malloc(100); 開辟 100 字節(jié)的臨時空間,返回值為其第一個字節(jié)的地址

3)函數(shù)原型void *calloc(unsigned n,unsigned size)

作用——在內存的動態(tài)存儲區(qū)中分配 n 個長度為 size 的連續(xù)空間,這個空間一般比較大,足以保存一個數(shù)組用 calloc 函數(shù)可以為一維數(shù)組開辟動態(tài)存儲空間,n 為數(shù)組元素個數(shù),每個元素長度為 size.函數(shù)返回指向所分配域的起始位置的指針;分配不成功,返回 NULL。p = calloc(50, 4); //開辟 50*4 個字節(jié)臨時空間,把起始地址分配給指針變量 p

4)函數(shù)原型:void free(void *p)

作用——釋放變量 p 所指向的動態(tài)空間,使這部分空間能重新被其他變量使用。p 是最近一次調用 calloc 或 malloc 函數(shù)時的函數(shù)返回值free 函數(shù)無返回值free (p ); // 釋放 p 所指向的已分配的動態(tài)空間

5) 函數(shù)原型void *realloc(void *p,unsigned int size)

作用——重新分配 malloc 或 calloc 函數(shù)獲得的動態(tài)空間大小,將 p 指向的動態(tài)空間大小改變?yōu)?size,p 的值不 變,分配失敗返回 NULLrealloc(p, 50); // 將 p 所指向的已分配的動態(tài)空間 改為 50 字節(jié)

6)返回類型說明
 

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

應用實例

動態(tài)創(chuàng)建數(shù)組,輸入 5 個學生的成績,另外一個函數(shù)檢測成績低于 60 分的,輸出不合格的成績。

代碼演示

#include <stdlib.h>
#include <stdio.h>
int main() {
	void check(int *);
	int * p,i; // 在堆區(qū)開辟一個 5 * 4 的空間,并將地址 (void *) , 轉成 (int *) , 賦給 p
	p = (int *)malloc(5*sizeof(int));
	for( i = 0; i < 5; i++) {
		scanf("%d", p + i);
	}
	check(p); //
	free(p); //銷毀 堆區(qū) p 指向的空間 getchar(); getchar();
	return 0;
}
void check(int *p) {
	int i;
	printf("\n不及格的成績 有: ");
	for(i =0; i < 5; i++) {
		if(p[i] < 60) {
			printf(" %d ", p[i]);
		}
	}
}

動態(tài)分配內存的基本原則

1)避免分配大量的小內存塊。分配堆上的內存有一些系統(tǒng)開銷,所以分配許多小的內存塊比分配幾個大內存塊的 系統(tǒng)開銷大

2)僅在需要時分配內存。只要使用完堆上的內存塊,就需要及時釋放它(如果使用動態(tài)分配內存,需要遵守原則: 誰分配,誰釋放), 否則可能出現(xiàn)內存泄漏

3)總是確保釋放以分配的內存。在編寫分配內存的代碼時,就要確定在代碼的什么地方釋放內存

4)在釋放內存之前,確保不會無意中覆蓋堆上已分配的內存地址,否則程序就會出現(xiàn)內存泄漏。在循環(huán)中分配內 存時,要特別小心

5)指針使用一覽

在這里插入圖片描述

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • C語言實現(xiàn)推箱子小游戲

    C語言實現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 基于C++實現(xiàn)日期計算器的詳細教程

    基于C++實現(xiàn)日期計算器的詳細教程

    在現(xiàn)代社會中,計算器已經進入了每一個家庭,人們在生活和學習中經常需要使用到計算器,下面這篇文章主要給大家介紹了關于基于C++實現(xiàn)日期計算器的相關資料,需要的朋友可以參考下
    2022-06-06
  • C語言內存管理及初始化細節(jié)示例詳解

    C語言內存管理及初始化細節(jié)示例詳解

    這篇文章主要為大家介紹了C語言內存管理及初始化細節(jié)示例的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • C++實現(xiàn)連連看消除算法

    C++實現(xiàn)連連看消除算法

    這篇文章主要為大家詳細介紹了C++實現(xiàn)連連看消除算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺析成員函數(shù)和常成員函數(shù)的調用

    淺析成員函數(shù)和常成員函數(shù)的調用

    下面小編就為大家?guī)硪黄獪\析成員函數(shù)和常成員函數(shù)的調用。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-05-05
  • C語言實現(xiàn)頁面置換算法(FIFO、LRU)

    C語言實現(xiàn)頁面置換算法(FIFO、LRU)

    這篇文章主要介紹了通過C語言實現(xiàn)的兩種頁面置換算法:先進先出(FIFO)頁面置換算法和最近最久未使用(LRU)頁面置換算法。文中的代碼具有一定的學習或工作價值,快來跟隨小編學習一下吧
    2021-12-12
  • C++ 靜態(tài)成員的類內初始化詳解及實例代碼

    C++ 靜態(tài)成員的類內初始化詳解及實例代碼

    這篇文章主要介紹了C++ 靜態(tài)成員的類內初始化詳解及實例代碼的相關資料,需要的朋友可以參考下
    2017-02-02
  • C/C++?string.h庫中memcpy()和memmove()的使用

    C/C++?string.h庫中memcpy()和memmove()的使用

    memcpy與memmove的目的都是將N個字節(jié)的源內存地址的內容拷貝到目標內存地址中,本文主要介紹了C/C++?string.h庫中memcpy()和memmove()的使用,感興趣的可以了解一下
    2023-12-12
  • 詳解C++中特殊類設計

    詳解C++中特殊類設計

    這篇文章主要為大家詳細介紹了C++中關于特殊類設計的相關知識,文中的示例代碼講解詳細,對我們學習C++有一定的幫助,感興趣的可以了解一下
    2023-07-07
  • C++讀取文件的四種方式總結

    C++讀取文件的四種方式總結

    C++可以根據(jù)不同的目的來選取文件的讀取方式,C++中有四種常見的讀取方式,本文主要介紹了這四種方法的具體實現(xiàn),需要的可以參考一下
    2023-04-04

最新評論