版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7講動(dòng)態(tài)分配內(nèi)存本講內(nèi)容:(1)返回指針值的函數(shù)(2)動(dòng)態(tài)內(nèi)存分配函數(shù)(3)動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)6.2.2返回指針值的函數(shù)函數(shù)的返回值可以是一個(gè)指針類(lèi)型的數(shù)據(jù)(即地址)返回指針值函數(shù)的定義格式:函數(shù)類(lèi)型*函數(shù)名(形參列表){函數(shù)體;}
說(shuō)明:定義一個(gè)返回指針值的函數(shù)與定義普通函數(shù)的格式基本類(lèi)似,只是在函數(shù)名前加*
,表明該函數(shù)返回一個(gè)指針值例:int*fun(inta,intb){函數(shù)體;}例2求某班成績(jī)的平均分要求用返回指針值的函數(shù)實(shí)現(xiàn)分析:通過(guò)函數(shù)average的返回值得到保存平均分變量的地址,進(jìn)而得到平均分,函數(shù)中將平均分變量定義成靜態(tài)的,這樣函數(shù)結(jié)束后該變量仍然存在。mainpaverageaver1靜態(tài)aver&aver1&aver1816.2.2返回指針值的函數(shù)voidmain(){intn;float*p;printf("inputn:");scanf("%d",&n);
p=average(n);printf("ave=%6.2f,",*p);}例2程序代碼靜態(tài)局部變量float*average(intn){inti;floats,*aver,sum=0;
staticfloataver1;
aver=&aver1;for(i=1;i<=n;i++){printf("inputs:");scanf("%f",&s);sum=sum+s;}aver1=sum/n;
return(aver);}6.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)ANSIC標(biāo)準(zhǔn)定義了3個(gè)動(dòng)態(tài)內(nèi)存分配函數(shù)1.malloc()函數(shù)函數(shù)原型:void*malloc(unsignedintsize);作用:在內(nèi)存開(kāi)辟一個(gè)長(zhǎng)度為size個(gè)字節(jié)的連續(xù)的存儲(chǔ)空間,返回一個(gè)指向該存儲(chǔ)區(qū)首地址的指針,若系統(tǒng)不能提供足夠的內(nèi)存單元(分配失敗),函數(shù)將返回空指針NULL說(shuō)明:void*是一種指針類(lèi)型,稱(chēng)為無(wú)類(lèi)型指針,常用來(lái)說(shuō)明其基類(lèi)型未知的指針,即聲明一個(gè)指針變量,但不指定它指向哪一種具體類(lèi)型的數(shù)據(jù)需要#include"stdlib.h"int*p=NULL;double*q=NULL;p=(int*)malloc(4);q=(double*)malloc(sizeof(double));*p=36;*q=45.8;使用malloc函數(shù)時(shí),必須用強(qiáng)制類(lèi)型轉(zhuǎn)換將返回的指針值轉(zhuǎn)換回所需要的數(shù)據(jù)類(lèi)型,然后再進(jìn)行賦值操作定義指針變量通常將其初始化為空指針申請(qǐng)一個(gè)長(zhǎng)度為4個(gè)字節(jié)的存儲(chǔ)空間,并將其首地址賦給int型的指針變量,則該空間可存放int型數(shù)據(jù)強(qiáng)制類(lèi)型轉(zhuǎn)換如果不知道某種類(lèi)型數(shù)據(jù)所占內(nèi)存空間的字節(jié)數(shù),可用sizeof()進(jìn)行計(jì)算6.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)int*p=NULL;double*q=NULL;p=(int*)malloc(4);q=(double*)malloc(sizeof(double));*p=36;*q=45.8;360x00371000NULLq45.80x00371048NULLp0x003710480x003710006.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)2.calloc()函數(shù)函數(shù)原型:void*calloc(unsignedintnum,unsignedintsize);作用:給若干同一類(lèi)型的數(shù)據(jù)項(xiàng)分配連續(xù)的存儲(chǔ)空間,其中每個(gè)數(shù)據(jù)項(xiàng)的長(zhǎng)度單位為字節(jié),若函數(shù)調(diào)用成功,返回一個(gè)指向該存儲(chǔ)區(qū)的首地址,若函數(shù)調(diào)用失敗返回空指針NULL說(shuō)明:參數(shù)num表示向系統(tǒng)申請(qǐng)的存儲(chǔ)空間的數(shù)量參數(shù)size表示每個(gè)存儲(chǔ)空間所占的字節(jié)數(shù)6.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)例:float*p=NULL;p=(float*)calloc(10,sizeof(float));申請(qǐng)10個(gè)連續(xù)的float型的存儲(chǔ)單元,并將其首地址賦給float型的指針變量,該存儲(chǔ)空間總的字節(jié)數(shù)為10×sizeof(float)顯然,用calloc()函數(shù)開(kāi)辟的存儲(chǔ)空間相當(dāng)于一個(gè)一維數(shù)組,第1個(gè)參數(shù)決定了一維數(shù)組的大小,第2個(gè)參數(shù)決定了數(shù)組元素的類(lèi)型,函數(shù)的返回值就是數(shù)組的首地址2.calloc()函數(shù)6.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)函數(shù)原型:voidfree(void*p);作用:釋放動(dòng)態(tài)申請(qǐng)的由指針變量p所指向的存儲(chǔ)空間,該函數(shù)無(wú)返回值
3.free()函數(shù)說(shuō)明:①參數(shù)p的值不是任意的地址,必須是程序中執(zhí)行malloc或calloc函數(shù)所返回的地址②p是普通指針(void*),但調(diào)用free函數(shù)時(shí)不需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,計(jì)算機(jī)系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換③該函數(shù)執(zhí)行后,將指針p所指向的存儲(chǔ)空間交還給系統(tǒng),系統(tǒng)可再重新分配6.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)1233.free()函數(shù)例:inti,*p=NULL;p=(int*)calloc(3,sizeof(int));for(i=0;i<3;i++)*(p+i)=i+1;free(p);
NULLp2010201220142010×注意:free函數(shù)釋放的是p所指向的動(dòng)態(tài)存儲(chǔ)空間,變量p并沒(méi)有被釋放for(i=0;i<3;i++)printf("%d",*(p+i));是否有輸出?6.6.2動(dòng)態(tài)內(nèi)存分配和釋放函數(shù)動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)例3:計(jì)算某班英語(yǔ)成績(jī)平均分(用一維動(dòng)態(tài)數(shù)組實(shí)現(xiàn))#include<stdio.h>#include<stdlib.h>voidmain(){intn,i,*p=NULL;floatsum=0,ave;scanf("%d",&n);
p=(int*)calloc(n,sizeof(int));
if(p==NULL){printf("\nNotenoughmemory!\n");exit(0);}for(i=0;i<n;i++){scanf("%d",p+i);sum=sum+*(p+i);
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年集裝箱租賃與拆裝箱及維護(hù)服務(wù)協(xié)議3篇
- 二零二五版在線教育股權(quán)抵押借款協(xié)議3篇
- 二零二五年建筑工程居間服務(wù)費(fèi)用協(xié)議書(shū)6篇
- 二零二四年學(xué)校心理咨詢(xún)服務(wù)保密協(xié)議及倫理規(guī)范與責(zé)任合同3篇
- 2024綠色能源電力供應(yīng)與消費(fèi)協(xié)議樣本版
- 2025年度硫鐵礦國(guó)際貿(mào)易代理服務(wù)合同4篇
- 二零二五版?zhèn)€人水泥購(gòu)銷(xiāo)質(zhì)量檢測(cè)合同3篇
- 二零二五年度跨境電商進(jìn)口貿(mào)易合同文本4篇
- 2025年度人工智能語(yǔ)音識(shí)別技術(shù)研發(fā)與應(yīng)用協(xié)議4篇
- 2025年度體育場(chǎng)館場(chǎng)地租賃與賽事運(yùn)營(yíng)服務(wù)協(xié)議4篇
- 冬春季呼吸道傳染病防控
- 中介費(fèi)合同范本(2025年)
- 《kdigo專(zhuān)家共識(shí):補(bǔ)體系統(tǒng)在腎臟疾病的作用》解讀
- 生產(chǎn)調(diào)度員崗位面試題及答案(經(jīng)典版)
- 【物 理】2024-2025學(xué)年八年級(jí)上冊(cè)物理寒假作業(yè)人教版
- 交通運(yùn)輸安全生產(chǎn)管理規(guī)范
- 2025春夏運(yùn)動(dòng)戶(hù)外行業(yè)趨勢(shì)白皮書(shū)
- 電力行業(yè) 電力施工組織設(shè)計(jì)(施工方案)
- 《法制宣傳之盜竊罪》課件
- 通信工程單位勞動(dòng)合同
- 查對(duì)制度 課件
評(píng)論
0/150
提交評(píng)論