" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

在這里插入圖片描述

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

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

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

  • 作用——在內(nèi)存的動態(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)

作用——在內(nèi)存的動態(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 是最近一次調(diào)用 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)返回類型說明
 

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

應(yīng)用實例

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

代碼演示

#include <stdlib.h>
#include <stdio.h>
int main() {
	void check(int *);
	int * p,i; // 在堆區(qū)開辟一個 5 * 4 的空間,并將地址 (void *) , 轉(zhuǎn)成 (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)分配內(nèi)存的基本原則

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

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

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

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

5)指針使用一覽

在這里插入圖片描述

總結(jié)

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

相關(guān)文章

  • C++ const修飾變量和修飾函數(shù)介紹

    C++ const修飾變量和修飾函數(shù)介紹

    這篇文章主要介紹了C++ const修飾變量和修飾函數(shù)介紹,本文直接用實例來講解各自的作用,并總結(jié)了各自的使用技巧,需要的朋友可以參考下
    2015-03-03
  • QT6實現(xiàn)音頻可視化的示例代碼

    QT6實現(xiàn)音頻可視化的示例代碼

    這篇文章主要為大家詳細(xì)介紹了一個基于QT6的音頻可視化Demo,文中的示例代碼,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • VS2019安裝配置MFC(安裝vs2019時沒有安裝mfc)

    VS2019安裝配置MFC(安裝vs2019時沒有安裝mfc)

    這篇文章主要介紹了VS2019安裝配置MFC(安裝vs2019時沒有安裝mfc),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 樹存儲結(jié)構(gòu)的幾種表示方法

    樹存儲結(jié)構(gòu)的幾種表示方法

    今天小編就為大家分享一篇關(guān)于樹存儲結(jié)構(gòu)的幾種表示方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Qt數(shù)據(jù)庫應(yīng)用之超級自定義委托

    Qt數(shù)據(jù)庫應(yīng)用之超級自定義委托

    Qt中需要用到自定義委托的情形很多,比如提供下拉框選擇,進(jìn)度條展示下載進(jìn)度啥的,默認(rèn)的單元格是沒有這些效果的,需要自己單獨用委托的形式來展示。本文將為大家介紹Qt中如何進(jìn)行超級自定義委托,需要的可以參考一下
    2022-03-03
  • 利用C++單例模式實現(xiàn)高性能配置管理器

    利用C++單例模式實現(xiàn)高性能配置管理器

    這篇文章主要為大家詳細(xì)介紹了如何利用C++單例模式實現(xiàn)高性能配置管理器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • Cocos2d-x中CCEditBox文本輸入框的使用實例

    Cocos2d-x中CCEditBox文本輸入框的使用實例

    這篇文章主要介紹了Cocos2d-x中CCEditBox文本輸入框的使用實例,本文在代碼中用大量注釋講解了CCEditBox的使用方法,需要的朋友可以參考下
    2014-09-09
  • C語言快速排序函數(shù)用法(qsort)

    C語言快速排序函數(shù)用法(qsort)

    這篇文章主要為大家詳細(xì)介紹了C語言的快排函數(shù)用法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 關(guān)于C/C++中typedef的定義與用法總結(jié)

    關(guān)于C/C++中typedef的定義與用法總結(jié)

    在C還是C++代碼中,typedef都使用的很多,在C代碼中尤其是多,typedef與#define有些相似,其實是不同的,特別是在一些復(fù)雜的用法上,需要的朋友可以參考下
    2012-12-12
  • 解析結(jié)構(gòu)體的定義及使用詳解

    解析結(jié)構(gòu)體的定義及使用詳解

    本篇文章是對結(jié)構(gòu)體的定義以及使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

东平县| 金平| 大渡口区| 南京市| 望江县| 巴东县| 通许县| 宜昌市| 偏关县| 沈阳市| 绿春县| 微山县| 类乌齐县| 甘孜| 南涧| 安西县| 太和县| 称多县| 株洲市| 灵宝市| 扎兰屯市| 张家川| 盐亭县| 即墨市| 常熟市| 无锡市| 平凉市| 元阳县| 安福县| 时尚| 广西| 伊宁县| 青岛市| 乌鲁木齐县| 明星| 花莲县| 西安市| 四平市| 岢岚县| 宝丰县| 垫江县|