chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

周立功:動(dòng)態(tài)分布內(nèi)存——malloc()函數(shù)與calloc()函數(shù)

AGk5_ZLG_zhiyua ? 來(lái)源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-08-22 17:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

周立功教授數(shù)年之心血之作《程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)》,電子版已無(wú)償性分享到電子工程師與高校群體,在公眾號(hào)回復(fù)【程序設(shè)計(jì)】即可在線閱讀。書本內(nèi)容公開后,在電子行業(yè)掀起一片學(xué)習(xí)熱潮。經(jīng)周立功教授授權(quán),本公眾號(hào)特對(duì)本書內(nèi)容進(jìn)行連載,愿共勉之。

第一章為程序設(shè)計(jì)基礎(chǔ),本文為1.9.1 malloc()函數(shù)和1.9.2 calloc()函數(shù)。

》》》》 1.9 動(dòng)態(tài)分配內(nèi)存

首先回顧一下內(nèi)存分配,所有程序都必須預(yù)留足夠的內(nèi)存存儲(chǔ)程序使用的數(shù)據(jù),這些內(nèi)存中有些是自動(dòng)分配的。比如,聲明“int iNum;”為一個(gè)int類型的值預(yù)留了足夠的內(nèi)存,或顯式指定分配一定數(shù)量的內(nèi)存,“int pData[20];”聲明預(yù)留了20個(gè)內(nèi)存位置,每個(gè)位置存儲(chǔ)的是int類型的值。聲明還為內(nèi)存提供了標(biāo)識(shí)符,因此可以使用iNum或pData識(shí)別數(shù)據(jù)。靜態(tài)數(shù)據(jù)在程序載入內(nèi)存時(shí)分配的,自動(dòng)數(shù)據(jù)是在程序執(zhí)行時(shí)分配的,并在程序離開時(shí)銷毀。但C能做的遠(yuǎn)不止這些,可以在程序運(yùn)行時(shí)請(qǐng)求所需要的內(nèi)存大小。

程序在運(yùn)行時(shí)分配的內(nèi)存空間稱之為“堆”的存儲(chǔ)池,雖然計(jì)算機(jī)在硬件上不直接支持堆,但C函數(shù)庫(kù)(stdlib.h)分別提供了用于動(dòng)態(tài)內(nèi)存分配和釋放的函數(shù)malloc()和free(),即在運(yùn)行時(shí)根據(jù)需要?jiǎng)?chuàng)建一個(gè)存儲(chǔ)單元,在不需要時(shí)釋放。

》》》 1.9.1 malloc()函數(shù)

malloc()函數(shù)原型如下:

void *malloc(unsigned int size);

其中,void *表示該函數(shù)是指針函數(shù),size為所需內(nèi)存的字節(jié)數(shù),可以用sizeof運(yùn)算符計(jì)算每個(gè)元素所需要的空間數(shù)量和所有元素需要內(nèi)存的字節(jié)數(shù)。如果分配成功,雖然malloc()不會(huì)為分配的內(nèi)存賦名,但它確實(shí)返回了動(dòng)態(tài)分配內(nèi)存塊的首字節(jié)地址。因此可以將該地址賦給一個(gè)指針變量,并使用指針變量訪問(wèn)這塊內(nèi)存。如果分配不成功或內(nèi)存不足,則返回空指針NULL。因此在使用它返回的指針之前,一定要先檢查返回值,否則可能會(huì)導(dǎo)致程序非正常終止。比如:

int *pi = malloc(sizeof(int));

if(pi != NULL){

// 指針沒(méi)有問(wèn)題

}else{

// 無(wú)效的指針

}

malloc()函數(shù)可用于返回指向數(shù)組的指針、指向結(jié)構(gòu)的指針等,所以通常該函數(shù)的返回值會(huì)被強(qiáng)制轉(zhuǎn)換為匹配的類型,但從C99版本開始,void *類型的指針不需要強(qiáng)制轉(zhuǎn)換地賦給所有的指針類型變量。

當(dāng)編寫程序時(shí),常常很難為數(shù)組估計(jì)合適的大小,較為方便的做法是等到程序運(yùn)行時(shí),再來(lái)確定數(shù)組的實(shí)際大小。其方法是用malloc()在程序執(zhí)行期間為數(shù)組分配空間,然后通過(guò)指向數(shù)組第一個(gè)元素的指針訪問(wèn)數(shù)組。假設(shè)正在編寫的程序需要n個(gè)整數(shù)構(gòu)成的數(shù)組,這里的n可以在程序執(zhí)行期間計(jì)算出來(lái)。首先需要聲明指針變量:

int * pi, n;

一旦n的值已知,就讓程序調(diào)用malloc()函數(shù)為數(shù)組分配存儲(chǔ)空間:

pi = malloc(n * sizeof(int));

if(pi == NULL) return -1;

當(dāng)pi指向分配動(dòng)態(tài)分配的內(nèi)存塊時(shí),就可以忽略pi是指針的事實(shí),將它作為數(shù)組名使用,這是C語(yǔ)言數(shù)組和指針形成緊密關(guān)系的所帶來(lái)的便利。由于數(shù)組名是該數(shù)組首元素的地址,如果讓pi指向這個(gè)塊的首元素,便可以象使用數(shù)組名一樣使用它。即可以使用pi[0]訪問(wèn)該塊的首元素,pi[1]訪問(wèn)第2個(gè)元素,以此類推。比如,使用下列循環(huán)對(duì)pi指向的數(shù)組進(jìn)行初始化:

for(i = 0; i 《 n; i++) pi[i] = 0;

動(dòng)態(tài)內(nèi)存分配可以提供更多的靈活性,比如:

char *pcStr;

char *pcStr = malloc(strlen(“OK!”) + 1);

strcpy(pcStr, “OK!”);

在這里,使用strlen()計(jì)算字符串的長(zhǎng)度,一定要記得加上結(jié)束符NUL。為何不用sizeof呢?因?yàn)閟zieof會(huì)返回?cái)?shù)組和指針的長(zhǎng)度,而不是字符串的長(zhǎng)度。

》》》 1.9.2 calloc()函數(shù)

雖然可以用malloc()函數(shù)為數(shù)組分配內(nèi)存,但C語(yǔ)言提供了一種更好用的calloc()函數(shù),其函數(shù)原型如下:

void *calloc(size_t nmenb, size_t size);

calloc()函數(shù)為nmemb個(gè)元素的數(shù)組分配內(nèi)存空間,其中,每個(gè)元素的長(zhǎng)度都是size個(gè)字節(jié)。如果要求的空間無(wú)效,那么此函數(shù)返回指針。在分配了內(nèi)存之后,calloc()函數(shù)會(huì)通過(guò)將所有位設(shè)置為0的方式進(jìn)行初始化。比如,調(diào)用calloc()函數(shù)為n個(gè)整數(shù)的數(shù)組分配存儲(chǔ)空間,且保證所有整數(shù)初始化為0。比如:

pi = calloc(n, sizeof(int));

因?yàn)閏alloc()函數(shù)會(huì)清楚分配的內(nèi)存,而malloc()函數(shù)不會(huì),所以可以調(diào)用以“1”作為第一個(gè)實(shí)參的calloc()函數(shù),為任何類型的數(shù)據(jù)項(xiàng)分配空間。比如:

struct point{ int x, y;} *pi;

pi = calloc(1, sizeof(struct point));

在執(zhí)行此語(yǔ)句后,pi將指向一個(gè)結(jié)構(gòu)體,且此結(jié)構(gòu)體的成員x和y都會(huì)被設(shè)為0。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 周立功
    +關(guān)注

    關(guān)注

    38

    文章

    130

    瀏覽量

    38217
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8960

    瀏覽量

    140240
  • malloc
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    226

原文標(biāo)題:周立功:動(dòng)態(tài)分布內(nèi)存——malloc()函數(shù)與calloc()函數(shù)

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于 IAR Embedded Workbench 的自研 MCU 芯片軟件函數(shù)與變量內(nèi)存布局優(yōu)化精控方法

    函數(shù)和變量指定section放置方法與操作流程,兼具過(guò)程記錄與詳細(xì)說(shuō)明,旨在打造一份實(shí)用的參考指南,助力開發(fā)者精準(zhǔn)掌控程序的內(nèi)存分布與執(zhí)行邏輯。文檔涵蓋從默認(rèn)section表的介紹,到多種放置手段的闡釋,以及實(shí)際配置示例的展示
    的頭像 發(fā)表于 04-30 16:38 ?289次閱讀
    基于 IAR Embedded Workbench 的自研 MCU 芯片軟件<b class='flag-5'>函數(shù)</b>與變量<b class='flag-5'>內(nèi)存</b>布局優(yōu)化精控方法

    函數(shù)指針的六個(gè)常見應(yīng)用場(chǎng)景

    函數(shù)指針在嵌入式開發(fā)中有著廣泛的應(yīng)用,它讓代碼更加靈活,減少冗余,提高可擴(kuò)展性。很多時(shí)候,我們需要根據(jù)不同的情況動(dòng)態(tài)調(diào)用不同的函數(shù),而函數(shù)指針正是實(shí)現(xiàn)這一需求的重要工具。本文將介紹六個(gè)
    的頭像 發(fā)表于 04-07 11:58 ?538次閱讀
    <b class='flag-5'>函數(shù)</b>指針的六個(gè)常見應(yīng)用場(chǎng)景

    詳解RTOS中的Hook函數(shù)

    Hook函數(shù)是RTOS中的一個(gè)關(guān)鍵特性,通過(guò)該函數(shù),用戶可以增強(qiáng)對(duì)任務(wù)管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?391次閱讀

    西門子TIA Portal中函數(shù)FC和函數(shù)塊FB的相互轉(zhuǎn)換

    描述 本文將介紹在西門子 TIA Portal 中使用 Add-In 插件實(shí)現(xiàn)函數(shù) FC 和函數(shù)塊 FB 的相互轉(zhuǎn)換的方法和步驟。 第1步: 添加 PLC 設(shè)備。 選擇西門子 CPU 1214C
    的頭像 發(fā)表于 01-15 10:07 ?2033次閱讀
    西門子TIA Portal中<b class='flag-5'>函數(shù)</b>FC和<b class='flag-5'>函數(shù)</b>塊FB的相互轉(zhuǎn)換

    如何把兩個(gè)數(shù)據(jù)返回給調(diào)用函數(shù)

    已經(jīng)知道函數(shù)會(huì)返回兩個(gè)數(shù)據(jù),提前申請(qǐng)兩個(gè)元素的內(nèi)存,并且把數(shù)組作為參數(shù)傳遞過(guò)去,把返回值放在數(shù)組中就行。 第三種,定義一個(gè)全局的結(jié)構(gòu)體變量,這樣可以不用傳參也不用返回,直接操作全局?jǐn)?shù)據(jù)。 比較典型的錯(cuò)誤寫法有兩種
    的頭像 發(fā)表于 01-08 10:15 ?413次閱讀

    RNN的損失函數(shù)與優(yōu)化算法解析

    函數(shù)有以下幾種: 交叉熵?fù)p失函數(shù) :交叉熵(Cross Entropy)是一種評(píng)估兩個(gè)概率分布之間差異的度量方法,即通過(guò)比較模型預(yù)測(cè)的概率分布和真實(shí)概率
    的頭像 發(fā)表于 11-15 10:16 ?1391次閱讀

    如何優(yōu)化SUMIF函數(shù)的效率

    在Excel中, SUMIF 函數(shù)是一個(gè)非常有用的工具,它可以根據(jù)指定的條件對(duì)數(shù)據(jù)進(jìn)行求和。然而,在處理大量數(shù)據(jù)時(shí), SUMIF 函數(shù)可能會(huì)變得效率低下。以下是一些優(yōu)化 SUMIF 函數(shù)效率的方法
    的頭像 發(fā)表于 11-11 09:20 ?1344次閱讀

    SUMIF函數(shù)對(duì)比VLOOKUP的優(yōu)勢(shì)

    在Excel中,數(shù)據(jù)管理和分析是日常工作中不可或缺的一部分。SUMIF函數(shù)和VLOOKUP函數(shù)是兩個(gè)非常受歡迎的函數(shù),它們可以幫助用戶快速地處理和分析數(shù)據(jù)。盡管它們都可以用于查找和匯總數(shù)據(jù),但它們?cè)?/div>
    的頭像 發(fā)表于 11-11 09:16 ?1253次閱讀

    SUMIF函數(shù)與SUMIFS函數(shù)的區(qū)別

    SUMIF函數(shù)和SUMIFS函數(shù)都是Excel中用于條件求和的函數(shù),它們可以幫助用戶根據(jù)特定的條件對(duì)數(shù)據(jù)進(jìn)行求和。盡管它們的基本功能相似,但在使用場(chǎng)景和功能上存在一些差異。以下是對(duì)這兩個(gè)函數(shù)
    的頭像 發(fā)表于 10-30 09:51 ?7529次閱讀

    SUMIF函數(shù)使用教程

    SUMIF函數(shù)是Excel中非常實(shí)用的函數(shù)之一,能夠根據(jù)指定條件對(duì)數(shù)據(jù)進(jìn)行篩選和求和操作。以下是對(duì)SUMIF函數(shù)使用方法的詳細(xì)教程: 一、基本語(yǔ)法 SUMIF函數(shù)的基本語(yǔ)法為: =SU
    的頭像 發(fā)表于 10-30 09:50 ?2498次閱讀

    RTOS中鉤子函數(shù)的用途及用法

    在很多操作系統(tǒng)中,都存在這樣一類API函數(shù)接口:HOOK函數(shù)(也叫鉤子函數(shù))。
    的頭像 發(fā)表于 10-23 16:25 ?780次閱讀
    RTOS中鉤子<b class='flag-5'>函數(shù)</b>的用途及用法

    如何由系統(tǒng)函數(shù)求頻率響應(yīng)

    頻率響應(yīng)函數(shù)表征了測(cè)試系統(tǒng)對(duì)給定頻率下的穩(wěn)態(tài)輸出與輸入的關(guān)系,可以通過(guò)系統(tǒng)函數(shù)(或稱為傳遞函數(shù))來(lái)求解。以下是由系統(tǒng)函數(shù)求頻率響應(yīng)的步驟: 一、理解系統(tǒng)
    的頭像 發(fā)表于 10-18 09:32 ?3551次閱讀

    什么叫系統(tǒng)的頻率響應(yīng)函數(shù)?它和傳遞函數(shù)有何關(guān)系

    系統(tǒng)的頻率響應(yīng)函數(shù)(Frequency Response Function, FRF)是描述線性時(shí)不變(Linear Time-Invariant, LTI)系統(tǒng)在不同頻率下輸入和輸出之間關(guān)系的數(shù)學(xué)
    的頭像 發(fā)表于 10-18 09:29 ?4808次閱讀

    內(nèi)存管理的硬件結(jié)構(gòu)

    常見的內(nèi)存分配函數(shù)malloc,mmap等,但大家有沒(méi)有想過(guò),這些函數(shù)在內(nèi)核中是怎么實(shí)現(xiàn)的?換句話說(shuō),Linux內(nèi)核的內(nèi)存管理是怎么實(shí)現(xiàn)的
    的頭像 發(fā)表于 09-04 14:28 ?661次閱讀
    <b class='flag-5'>內(nèi)存</b>管理的硬件結(jié)構(gòu)

    面試???1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針和指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場(chǎng)景,對(duì)于提升嵌入式程序的效率和質(zhì)量至關(guān)重要。一、指針函數(shù)函數(shù)指針指針
    的頭像 發(fā)表于 08-10 08:11 ?1459次閱讀
    面試常考+1:<b class='flag-5'>函數(shù)</b>指針與指針<b class='flag-5'>函數(shù)</b>、數(shù)組指針與指針數(shù)組