版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++語(yǔ)言程序設(shè)計(jì)第十一組C++語(yǔ)言程序設(shè)計(jì)第六章指針和引用C++語(yǔ)言程序設(shè)計(jì)1目錄C++語(yǔ)言程序設(shè)計(jì)2“指針動(dòng)態(tài)內(nèi)存引用基本知識(shí)指針與函數(shù)指針與字符串指針與數(shù)組指針與結(jié)構(gòu)體編程技能void類(lèi)型指針內(nèi)存泄漏與懸掛指針刨根問(wèn)底C++語(yǔ)言程序設(shè)計(jì)3基本知識(shí)a6.1指針關(guān)于變量(復(fù)習(xí))定義變量:例如charch1=‘Y’;數(shù)據(jù)類(lèi)型:指定了數(shù)據(jù)的表示和處理方法變量的地址:存放的位置變量的值:存放的內(nèi)容使用變量名可以直接訪問(wèn)內(nèi)存中的數(shù)據(jù)——直接訪問(wèn)C++語(yǔ)言程序設(shè)計(jì)46.1指針指針變量:簡(jiǎn)稱(chēng)指針,存放著某種數(shù)據(jù)類(lèi)型變量的地址訪問(wèn)指針變量時(shí),只能看到地址——直接訪問(wèn)通過(guò)這個(gè)地址,能訪問(wèn)該地址單元中的內(nèi)容——間接訪問(wèn)例如:指針變量pch1中存放著字符型變量ch1的地址建立了pch1和ch1的指向關(guān)系:pch1指向ch1訪問(wèn)pch1,只能看到地址:直接訪問(wèn)通過(guò)pch1訪問(wèn)它所指向的ch1:間接訪問(wèn)C++語(yǔ)言程序設(shè)計(jì)56.1指針指針變量的定義格式:<類(lèi)型名>*變量名1,*變量名2;例如:int*pa1,*pa2;定義指針變量時(shí)的“*”有如下兩個(gè)含義聲明變量pa1、pa2是指針變量說(shuō)明變量pa1和pa2的類(lèi)型是(int*)型,即指向整型變量的指針指針變量的類(lèi)型:是它所指定的地址單元中存放的數(shù)據(jù)的類(lèi)型pa1和pa2所指定的地址單元中,只能存放整型數(shù)據(jù)C++語(yǔ)言程序設(shè)計(jì)66.1指針指針的初始化是指給它分配一個(gè)有效的數(shù)據(jù)地址指針初始化的方法定義時(shí)初始化定義后賦值指針必須在初始化后才可以正確使用指針如果未初始化,其中的地址是隨機(jī)值,指針指向無(wú)意義的或者沒(méi)有權(quán)利去訪問(wèn)的內(nèi)存區(qū)域,這樣的指針是不能安全使用的C++語(yǔ)言程序設(shè)計(jì)7“先初始化,后使用”是指針變量使用的一條基本原則6.1指針定義指針變量時(shí)初始化格式:<類(lèi)型名>*指針變量名=&變量名;例如:charch1=’Y’;char*pch1=&ch1;“&”:取地址運(yùn)算符,可以獲取變量的地址定義指針變量后,用賦值的方式初始化例如:int*pi=0;inti=100;pi=&i;建議:在定義指針變量時(shí),如果不確定指針的指向,應(yīng)初始化為0或NULL空指針:0或NULL,表示不指向任何內(nèi)存單元C++語(yǔ)言程序設(shè)計(jì)8例:觀察指針的值和指針變量自身的地址6.1指針C++語(yǔ)言程序設(shè)計(jì)9//指針變量#include<iostream>usingnamespacestd;intmain(){inta=10;int*pa=&a;cout<<pa<<""<<&pa<<endl;
return0;}6.1指針間接引用運(yùn)算符“*”和指針變量連用,對(duì)指針?biāo)赶虻膬?nèi)存地址單元進(jìn)行間接訪問(wèn)格式:*指針變量例如:intva=100;int*pva=&va;*pva=200;
*pva就是pva所指向的變量va要用指針來(lái)訪問(wèn)它所指向的變量,必須使用間接引用運(yùn)算“*”C++語(yǔ)言程序設(shè)計(jì)10例:對(duì)變量的直接訪問(wèn)和間接訪問(wèn)6.1指針C++語(yǔ)言程序設(shè)計(jì)11//對(duì)變量的直接訪問(wèn)和間接訪問(wèn)#include<iostream>usingnamespacestd;voidmain(){charch1='a',*pch=0;intk1=100;pch=&ch1;
//指針pch指向變量ch1cout<<"*pch="<<*pch<<endl; //間接訪問(wèn)
*pch='B';cout<<"ch1="<<ch1<<endl; //直接訪問(wèn)
ch1=k1;cout<<"*pch="<<*pch<<endl; //間接訪問(wèn)}運(yùn)行結(jié)果:*pch=ach1=B*pch=d6.1指針指針的算術(shù)運(yùn)算指針可以和一個(gè)整數(shù)n做加法或者減法運(yùn)算例如:設(shè)p為指向數(shù)組中某元素的指針p+n:表示指向p后方第n個(gè)元素p-n:表示指向pa前方第n個(gè)元素指針的(++)和(--)運(yùn)算運(yùn)算后,指針向其后方或前方的元素指針相減運(yùn)算結(jié)果為其間元素個(gè)數(shù)注意:指針的算術(shù)運(yùn)算和一般的算術(shù)運(yùn)算有不同的含義C++語(yǔ)言程序設(shè)計(jì)12例:輸出下標(biāo)為偶數(shù)的數(shù)組元素的值6.1指針C++語(yǔ)言程序設(shè)計(jì)13//指針運(yùn)算#include<iostream>usingnamespacestd;voidmain(){intk1[10]={11,24,37,44,58,66,79,86,93,108},*pk=NULL;
pk=&k1[0];
//數(shù)組第一個(gè)元素的地址賦值給指針kfor(inti=0;i<10;i=i+2 //每次循環(huán),指針加2 cout<<"k1["<<i<<"]="<<*(pk+i)<<endl;}數(shù)組第一個(gè)元素(下標(biāo)為0)的地址賦值給指針k每次循環(huán),指針加26.1指針指針的關(guān)系運(yùn)算相同類(lèi)型的指針可以進(jìn)行各種關(guān)系運(yùn)算可以測(cè)試兩個(gè)指針是否相等如果相等,則表示它們指向相同的目標(biāo)數(shù)據(jù)建議:使用指針進(jìn)行間接訪問(wèn)之前,應(yīng)測(cè)試它是否已指向有效的目標(biāo)數(shù)據(jù)如果進(jìn)行了指針的初始化,則指針的值只可能:為0(NULL),未指向任何目標(biāo)數(shù)據(jù)已指向有效的目標(biāo)數(shù)據(jù)測(cè)試方法:if(p!=NULL)或if(p)C++語(yǔ)言程序設(shè)計(jì)146.1指針指針的賦值運(yùn)算指針的賦值運(yùn)算一定是地址的賦值用來(lái)對(duì)指針變量賦值的可以是:同類(lèi)型變量的地址同類(lèi)型的已經(jīng)初始化的指針變量向系統(tǒng)申請(qǐng)的同類(lèi)型動(dòng)態(tài)數(shù)據(jù)的地址0或NULL注意:不同類(lèi)型的指針是不可以互相賦值的。在指針賦值時(shí),不存在類(lèi)型自動(dòng)轉(zhuǎn)換的機(jī)制。C++語(yǔ)言程序設(shè)計(jì)156.2動(dòng)態(tài)內(nèi)存動(dòng)態(tài)內(nèi)存是在程序運(yùn)行時(shí)才可以申請(qǐng)、使用和釋放的內(nèi)存存放動(dòng)態(tài)數(shù)據(jù)的內(nèi)存區(qū)域也稱(chēng)為“堆內(nèi)存”動(dòng)態(tài)內(nèi)存不能通過(guò)變量名來(lái)使用,而只能通過(guò)指針來(lái)間接訪問(wèn)堆內(nèi)存的使用需要存儲(chǔ)大量數(shù)據(jù)時(shí),一般申請(qǐng)使用堆內(nèi)存數(shù)組元素個(gè)數(shù)在程序運(yùn)行時(shí)才能確定時(shí),只能使用堆內(nèi)存存儲(chǔ)C++語(yǔ)言程序設(shè)計(jì)166.2動(dòng)態(tài)內(nèi)存C語(yǔ)言的動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放通過(guò)函數(shù)malloc()申請(qǐng)動(dòng)態(tài)內(nèi)存通過(guò)函數(shù)free()釋放動(dòng)態(tài)內(nèi)存函數(shù)的聲明包含在“stdlib.h”頭文件中C++語(yǔ)言程序設(shè)計(jì)176.2動(dòng)態(tài)內(nèi)存malloc函數(shù)原型為:void*malloc(unsignedsize);malloc函數(shù)申請(qǐng)size個(gè)字節(jié)的內(nèi)存空間,并返回指向所分配內(nèi)存的void*類(lèi)型的指針,如果沒(méi)有申請(qǐng)到內(nèi)存空間,則返回NULLvoid*指針具有很好的通用性,可以通過(guò)類(lèi)型轉(zhuǎn)換賦值給任何類(lèi)型的指針變量例如:int*pn=(int*)malloc(sizeof(int));按照int類(lèi)型數(shù)據(jù)存儲(chǔ)空間的大小分配內(nèi)存空間整型指針pn指向該內(nèi)存空間通過(guò)*pn訪問(wèn)該內(nèi)存空間C++語(yǔ)言程序設(shè)計(jì)186.2動(dòng)態(tài)內(nèi)存free函數(shù)原型為:voidfree(void*ptr);free函數(shù)釋放先前malloc所分配的內(nèi)存,所要釋放的內(nèi)存由指針ptr指向前例:free(pn);pn=NULL;因?yàn)閜n指向的內(nèi)存已釋放,但pn的值還存在,為其賦值0后,可以避免使用它來(lái)訪問(wèn)無(wú)效內(nèi)存C++語(yǔ)言程序設(shè)計(jì)196.2動(dòng)態(tài)內(nèi)存C++的動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放使用new、delete運(yùn)算符使用運(yùn)算符new申請(qǐng)動(dòng)態(tài)內(nèi)存格式:new<類(lèi)型名>(初值)如果申請(qǐng)成功,返回指定類(lèi)型內(nèi)存的地址;如果申請(qǐng)失敗,返回NULL指針例如:int*pi=0;pi=newint(10);*pi=100;動(dòng)態(tài)內(nèi)存使用完畢后,要用delete運(yùn)算符來(lái)釋放格式:delete<指針名>;上例:deletepi;pi=NULL;C++語(yǔ)言程序設(shè)計(jì)206.2動(dòng)態(tài)內(nèi)存使用new申請(qǐng)動(dòng)態(tài)一維數(shù)組格式:new<類(lèi)型名>[表達(dá)式]表達(dá)式用來(lái)指定數(shù)組大小在動(dòng)態(tài)申請(qǐng)數(shù)組空間時(shí),不可以對(duì)數(shù)組進(jìn)行初始化釋放動(dòng)態(tài)數(shù)組空間都用相同的表達(dá)式格式:delete[]<指針名>;C++語(yǔ)言程序設(shè)計(jì)216.2動(dòng)態(tài)內(nèi)存例:在堆內(nèi)存中申請(qǐng)空間存放大數(shù)組C++語(yǔ)言程序設(shè)計(jì)22//例6-4堆內(nèi)存的申請(qǐng)和釋放#include<iostream>#include<ctime>usingnamespacestd;voidmain(){constintN=10000000;
int*parr=newint[N];
//int*parr=(int*)malloc(N*sizeof(int));srand(time(NULL));int*pm=parr;
for(inti=0;i<10;i++){ *pm=rand()%100; pm++;}for(inti=0;i<20;i++) cout<<*(parr+i)<<endl;
delete[]parr;//free(parr);}6.3引用引用的概念是C++中新引入的概念,也是C語(yǔ)言中不存在的數(shù)據(jù)類(lèi)型。引用是變量或者其他編程實(shí)體(如對(duì)象)的別名引用和指針的對(duì)比指針變量有自己的存儲(chǔ)空間,
是獨(dú)立存在的引用類(lèi)型的變量不占用單獨(dú)
的存儲(chǔ)空間,不能獨(dú)立存在C++語(yǔ)言程序設(shè)計(jì)236.3引用引用的定義格式:<類(lèi)型名>&引用名=變量名;例如:
intsomeInt;
int&refInt=someInt;注意:引用必須在定義的時(shí)候就完成初始化C++語(yǔ)言程序設(shè)計(jì)246.3引用引用有以下特點(diǎn)引用不能獨(dú)立存在,它只是其他變量的別名引用必須在定義的同時(shí)就初始化引用一旦定義,引用關(guān)系就不可以更改,即B若是A的引用,就不可能是其他變量的引用引用的類(lèi)型就是相關(guān)的變量的類(lèi)型,引用的使用和變量的使用相同C++語(yǔ)言程序設(shè)計(jì)256.3引用例:引用的使用C++語(yǔ)言程序設(shè)計(jì)26//引用的使用#include<iostream>usingnamespacestd;voidmain(){intintA=10;
int&refA=intA;cout<<“引用的值和相關(guān)變量值相同:refA="<<refA<<endl;
refA=5;cout<<"引用變化,則相關(guān)變量也變化:intA="<<intA<<endl;cout<<"引用的地址和相關(guān)變量地址相同:intA的地址="<<&intA<<endl;cout<<"引用的地址和相關(guān)變量地址相同:refA的地址="<<&refA<<endl;}運(yùn)行結(jié)果:引用的值和相關(guān)變量值相同:refA=10引用變化,則相關(guān)變量也變化:intA=5引用的地址和相關(guān)變量地址相同:intA的地址=0x0012FF7C引用的地址和相關(guān)變量地址相同:refA的地址=0x0012FF7C6.3引用關(guān)于引用的使用在實(shí)際的程序中,沒(méi)有必要在一個(gè)程序作用域中定義一個(gè)變量后,又定義它的引用程序中真正使用引用的地方是在函數(shù)調(diào)用中將引用作為函數(shù)的形式參數(shù)將引用作為函數(shù)的返回類(lèi)型C++語(yǔ)言程序設(shè)計(jì)27C++語(yǔ)言程序設(shè)計(jì)28編程技能a(一)指針與函數(shù)在程序設(shè)計(jì)中,指針和引用的主要應(yīng)用之一是作為函數(shù)的形式參數(shù)它們形成了C++函數(shù)調(diào)用中的另一種調(diào)用方式:地址調(diào)用地址調(diào)用可以提高參數(shù)的傳遞效率從函數(shù)返回多個(gè)結(jié)果C++語(yǔ)言程序設(shè)計(jì)29(一)指針與函數(shù)用指針作為函數(shù)參數(shù),實(shí)現(xiàn)地址調(diào)用,必須滿(mǎn)足以下條件函數(shù)的形式參數(shù)是指針變量函數(shù)的實(shí)參數(shù)是內(nèi)存的地址,具體來(lái)說(shuō)可以是:數(shù)組名、變量的地址、用變量地址初始化的指針形參指針類(lèi)型和實(shí)參地址類(lèi)型必須相同C++語(yǔ)言程序設(shè)計(jì)30(一)指針與函數(shù)滿(mǎn)足以上條件后,這樣的函數(shù)調(diào)用在使用上有以下的特點(diǎn):實(shí)參傳遞給形參的是內(nèi)存的地址,所以形參指針指向?qū)崊⒆兞啃螀⒅羔樛ㄟ^(guò)間接引用,直接訪問(wèn)實(shí)參變量,包括改變實(shí)參變量的值函數(shù)調(diào)用后,可以保留對(duì)實(shí)參變量的操作結(jié)果,如果有多個(gè)實(shí)參,就可以有多個(gè)實(shí)參變量在函數(shù)調(diào)用中得到修改關(guān)于地址調(diào)用“可以返回多個(gè)結(jié)果”的理解實(shí)際上并不存在從形參到實(shí)參的“返回”操作形參指針的間接引用就是對(duì)實(shí)參變量的操作實(shí)參變量的變化在函數(shù)調(diào)用過(guò)程中已經(jīng)發(fā)生,而不是在函數(shù)執(zhí)行后才發(fā)生C++語(yǔ)言程序設(shè)計(jì)31(一)指針與函數(shù)例:編寫(xiě)數(shù)據(jù)交換的函數(shù)C++語(yǔ)言程序設(shè)計(jì)32#include<iostream>usingnamespacestd;voidSwap(int*a,int*b);voidmain(){intx(10),y(5);cout<<"主函數(shù)變量的值:x="<<x<<"y="<<y<<endl;Swap(&x,&y);cout<<"返回后變量的值:x="<<x<<"y="<<y<<endl;}voidSwap(int*a,int*b){intt;
t=*a;*a=*b;*b=t;cout<<"函數(shù)中完成了交換:*a="<<*a<<"*b="<<*b<<endl;}運(yùn)行結(jié)果:主函數(shù)變量的值:x=10y=5函數(shù)中完成了交換:*a=5*b=10返回后變量的值:x=5y=10變量的地址作為實(shí)參數(shù)指針變量作為形式參數(shù)//通過(guò)地址調(diào)用,交換調(diào)用程序的兩/個(gè)數(shù)據(jù)(一)指針與函數(shù)執(zhí)行過(guò)程分析當(dāng)main()函數(shù)調(diào)用Swap()函數(shù)時(shí),程序中用變量x和y的地址作為實(shí)參,傳遞給指針a和b當(dāng)程序調(diào)用運(yùn)行到Swap()函數(shù),通過(guò)內(nèi)部間接引用*a和*b進(jìn)行交換,實(shí)際上就是x和y進(jìn)行交換C++語(yǔ)言程序設(shè)計(jì)33(一)指針與函數(shù)引用的主要應(yīng)用就是作為函數(shù)的形式參數(shù)引用作為函數(shù)的形式參數(shù)具有以下特點(diǎn)引用作為形式參數(shù),參數(shù)傳遞屬于地址傳遞引用作為形式參數(shù)時(shí),實(shí)參數(shù)是相同類(lèi)型的變量引用作為形式參數(shù)時(shí),在函數(shù)中并不產(chǎn)生實(shí)參數(shù)的副本,形式參數(shù)的引用和實(shí)參數(shù)的變量實(shí)際上是同一個(gè)實(shí)體函數(shù)對(duì)引用的操作,也是對(duì)實(shí)參變量的操作,函數(shù)調(diào)用可以改變實(shí)參數(shù)的值C++語(yǔ)言程序設(shè)計(jì)34(一)指針與函數(shù)例:編寫(xiě)數(shù)據(jù)交換的函數(shù)C++語(yǔ)言程序設(shè)計(jì)35#include<iostream>usingnamespacestd;voidSwap(int&a,int&b);voidmain(){intx(10),y(5);cout<<"主函數(shù)變量的值:x="<<x<<"y="<<y<<endl;Swap(x,y);cout<<"返回后變量的值:x="<<x<<"y="<<y<<endl;}voidSwap(int&a,int&b){intt;
t=a;a=b;b=t;cout<<"函數(shù)中完成了交換:a="<<a<<"b="<<b<<endl;}運(yùn)行結(jié)果:主函數(shù)變量的值:x=10y=5函數(shù)中完成了交換:a=5b=10返回后變量的值:x=5y=10變量作為實(shí)參數(shù)引用變量作為形式參數(shù)//用引用作為形式參數(shù),交換兩個(gè)實(shí)際參數(shù)(一)指針與函數(shù)執(zhí)行過(guò)程分析當(dāng)main()函數(shù)調(diào)用Swap()函數(shù)時(shí),程序中用變量x和y作為實(shí)參,形參引用a是就是變量x的別名,形參引用b就是變量y的別名當(dāng)程序調(diào)用運(yùn)行到Swap()函數(shù),通過(guò)內(nèi)部進(jìn)行a和b的交換,實(shí)際上就是x和y進(jìn)行交換C++語(yǔ)言程序設(shè)計(jì)36105aybx(一)指針與函數(shù)指針作為形式參數(shù)和引用作為形式參數(shù)的對(duì)比兩者都屬于地址調(diào)用:通過(guò)指針的地址調(diào)用和通過(guò)引用的地址調(diào)用兩者在函數(shù)調(diào)用時(shí)都不建立實(shí)參的副本,而是對(duì)實(shí)參的數(shù)據(jù)直接進(jìn)行操作指針作為形式參數(shù)需要在函數(shù)中定義指針變量,引用作為形式參數(shù)不需要新建任何實(shí)體,所以用引用不需要占用新的內(nèi)存,執(zhí)行效率更高用引用作為形式參數(shù),編程語(yǔ)句上也更簡(jiǎn)單些在C++的編程中,會(huì)更多地使用引用作為函數(shù)的形式參數(shù)C++語(yǔ)言程序設(shè)計(jì)37(一)指針與函數(shù)常指針和常引用不是所有以指針或引用作為形參的函數(shù)都需要修改指針?biāo)傅臄?shù)據(jù)例如:在調(diào)用一個(gè)求數(shù)組最大值的函數(shù)時(shí),就不希望數(shù)組元素的值發(fā)生變化,所以希望在函數(shù)中能夠限制對(duì)數(shù)組元素的修改使用常指針和常引用可以實(shí)現(xiàn)對(duì)傳遞參數(shù)的保護(hù)常引用是指引用的是常量,也就是不能通過(guò)引用本身改變其所引用的對(duì)象聲明格式:const<類(lèi)型名><引用名>&;如果實(shí)參數(shù)需要保護(hù),可以使用“常引用”作為形式參數(shù)C++語(yǔ)言程序設(shè)計(jì)38(一)指針與函數(shù)常指針是指向常量的指針,就是規(guī)定指針?biāo)赶虻膬?nèi)容不可以通過(guò)指針的間接引用來(lái)改變聲明格式:const<類(lèi)型名>*<指針名>;例如:constint*ptint;指針ptint的類(lèi)型是(constint*),也就是指向一個(gè)恒定的整型數(shù)整型數(shù)本身也許是可以改變的,只是不可以通過(guò)指針ptint的間接引用來(lái)改變而ptint也可以用不同的地址來(lái)對(duì)它賦值常指針最常見(jiàn)的應(yīng)用是出現(xiàn)在函數(shù)原型中例如:char*strcpy(char*s1,constchar*s2);//功能是把s2指向的字符串復(fù)制給s1s2指向的字符串不要被函數(shù)修改,所以定義常指針C++語(yǔ)言程序設(shè)計(jì)39(一)指針與函數(shù)指針常量指針本身的內(nèi)容是常量聲明格式:<類(lèi)型名>*const<指針名>=<初值>;例如:charch,*constptch=&ch;指針ptch是用ch地址初始化的常量,不可以改為其他地址可以通過(guò)ptch的間接引用來(lái)改變ch的值數(shù)組名就是一個(gè)指針常量C++語(yǔ)言程序設(shè)計(jì)40(一)指針與函數(shù)指針函數(shù)如果一個(gè)函數(shù)的返回值是指針,則這樣的函數(shù)稱(chēng)為指針函數(shù)例如:int*func01(intk);函數(shù)func01()返回一個(gè)指向整型數(shù)據(jù)的指針?lè)祷刂羔槪瑢?shí)際上就是返回一個(gè)內(nèi)存單元的地址注意:不能返回函數(shù)中局部變量的地址這樣的地址處于內(nèi)存的棧區(qū),函數(shù)結(jié)束時(shí)所占用的??臻g就釋放了,回到主調(diào)函數(shù)后不能再使用該空間了C++語(yǔ)言程序設(shè)計(jì)41(一)指針與函數(shù)例:利用指針函數(shù)完成一個(gè)數(shù)組的倒序排列C++語(yǔ)言程序設(shè)計(jì)42//在指針函數(shù)reverse中,申請(qǐng)動(dòng)態(tài)數(shù)組,最后返回這個(gè)地址include<iostream>usingnamespacestd;int*reverse(intconst*list,constintsize); //指針函數(shù)voidprintArray(intconst*list,constintsize);voidmain(){intlist[]={1,2,3,4,5,6};
int*pList=reverse(list,6);
//獲得倒序排序后數(shù)組的地址
printArray(pList,6); //顯示倒序排序后的數(shù)組
delete[]pList;}(一)指針與函數(shù)例:利用指針函數(shù)完成一個(gè)數(shù)組的倒序排列C++語(yǔ)言程序設(shè)計(jì)43//在指針函數(shù)reverse中,申請(qǐng)動(dòng)態(tài)數(shù)組,最后返回這個(gè)地址int*reverse(intconst*list,constintsize) //指針函數(shù){int*result=newint[size];
//函數(shù)中定義的動(dòng)態(tài)數(shù)組
for(inti=0,j=size-1;i<size;i++,j--)result[j]=list[i];
returnresult; //返回動(dòng)態(tài)數(shù)組的地址}voidprintArray(intconst*list,constintsize){for(inti=0;i<size;i++)cout<<list[i]<<"";}不能在reverse函數(shù)中定義局部數(shù)組intresult[6],使用堆空間是比較好的解決辦法運(yùn)行結(jié)果:654321(一)指針與函數(shù)函數(shù)指針指針和函數(shù)有著天然的聯(lián)系——函數(shù)名本身就是地址指向函數(shù)的指針?lè)Q為函數(shù)指針聲明格式:<類(lèi)型名>(*指針名)(形參列表);例如:int(*fptr)(int,int);定義了一個(gè)函數(shù)指針fptr,它可以指向帶兩個(gè)整型參數(shù)且返回值類(lèi)型為整型的任意函數(shù)函數(shù)指針指向某個(gè)函數(shù)后,就可以像使用函數(shù)名一樣使用函數(shù)指針來(lái)調(diào)用函數(shù)了注意:因?yàn)楹瘮?shù)名代表函數(shù)的內(nèi)存地址,所以給函數(shù)指針賦值時(shí),直接用函數(shù)名,不需要取地址運(yùn)算符&C++語(yǔ)言程序設(shè)計(jì)44(一)指針與函數(shù)例:使用函數(shù)指針調(diào)用函數(shù)C++語(yǔ)言程序設(shè)計(jì)45//在函數(shù)指針調(diào)用函數(shù)#include<iostream>usingnamespacestd;floatareaofRectangle(floatwidth,floatheight){ returnwidth*height;}floatareaofTriangle(floatheml,floatheight){ return(heml*height)/2;}(一)指針與函數(shù)例:使用函數(shù)指針調(diào)用函數(shù)
C++語(yǔ)言程序設(shè)計(jì)46voidmain(){float(*fptr)(float,float);floatarea,worh,height;cout<<"請(qǐng)輸入矩形的寬和高:"<<endl;cin>>worh>>height;
fptr=areaofRectangle;
area=fptr(worh,height);cout<<"矩形的面積為:"<<area<<endl;
cout<<"請(qǐng)輸入三角形的底和高:"<<endl;cin>>worh>>height;
fptr=areaofTriangle;area=fptr(worh,height);cout<<"三角形面積為:"<<area<<endl;} 定義函數(shù)指針直接用函數(shù)名給函數(shù)指針賦值,不需要取地址運(yùn)算符&使用函數(shù)指針調(diào)用函數(shù)運(yùn)行結(jié)果:請(qǐng)輸入矩形的寬和高:20矩形的面積為:200請(qǐng)輸入三角形的底和高:20三角形的面積為:100(二)指針與字符串C++處理字符串有兩種方式:數(shù)組方式和指針?lè)绞綌?shù)組方式:將字符串存入字符數(shù)組后,再進(jìn)行處理一般可以在聲明數(shù)組的時(shí)候用字符串來(lái)初始化例如:charstring_array[]="What’saniceday!";指針?lè)绞剑河米址A縼?lái)初始化一個(gè)字符指針例如:char*string_pt="What’saniceday!";C++字符串常量是用雙引號(hào)括起的字符序列,并以字符'\0'作為結(jié)束標(biāo)志字符串常量存放在內(nèi)存的常量區(qū)域字符串常量的首地址看做指針,這種指針既是常指針,也是指針常量字符串常量的內(nèi)容是不能改變的,而且首地址也是不能改變的C++語(yǔ)言程序設(shè)計(jì)47(二)指針與字符串兩種字符串處理方式比較兩種方式在一些具體的操作上有所不同的C++語(yǔ)言程序設(shè)計(jì)48已
定
義chars_array[]="Thiaisabook";char*s_pt="Thisisabook";直接輸出cout<<s_array;可以cout<<s_pt;可以直接輸入cin>>s_array;可以cin>>s_pt;不可以直接更改s_array="OK";不可以s_pt="OK";可以賦值s_array=s_pt;不可以s_pt=s_array;可以常量不能放在等式左邊通過(guò)cin來(lái)修改指針?biāo)傅膬?nèi)容是不允許的
運(yùn)行時(shí)會(huì)出錯(cuò)(二)指針與字符串字符串操作函數(shù)C++提供了大量的字符串處理函數(shù)使用時(shí)都需要包含頭文件string.h(cstring)調(diào)用這些函數(shù)時(shí),要保證作為目的字符串的實(shí)際參數(shù)必須是可寫(xiě)的,且有足夠的空間存放源串,否則會(huì)出現(xiàn)運(yùn)行錯(cuò)誤C++語(yǔ)言程序設(shè)計(jì)49功能函數(shù)原型返回值說(shuō)明字符串長(zhǎng)度intstrlen(constchar*string);長(zhǎng)度值'\0'不計(jì)入字符串復(fù)制char*strcpy(char*s1,constchar*s2);復(fù)制的字符串s1要有足夠空間按字符數(shù)復(fù)制char*strncpy(char*s1,constchar*s2);復(fù)制的字符串s1要有足夠空間字符串比較intstrcmp(constchar*s1,constchar*s2);<0,=0,>0對(duì)應(yīng)s1<s2,s1=s2,s1>s2字符串連接char*strcat(char*s1,constchar*s2);連接后的字符串s1要有足夠空間(二)指針與字符串例:strcpy()和strncpy()的比較C++語(yǔ)言程序設(shè)計(jì)50//strcpy()和strncpy()的比較#include<iostream>#include<string>usingnamespacestd;voidmain(){intn;char*array1="HappyBirthdaytoYou";chararray3[15];chararray2[25];
strcpy(array2,array1); //復(fù)制array1到array2cout<<"Thestringinarray1is:"<<array1<<"\nThestringinarray2is:"<<array2<<'\n‘;復(fù)制array1到array2,沒(méi)有問(wèn)題(二)指針與字符串例:strcpy()和strncpy()的比較C++語(yǔ)言程序設(shè)計(jì)51/*strcpy(array3,array1); //直接復(fù)制array1到array3cout<<array3<<endl;*/
n=sizeof(array3);strncpy(array3,array1,n-1);
//復(fù)制array1的n-1個(gè)字符到array3
array3[n-1]='\0';
//添加'\0'到array3cout<<"Thestringinarray3is:"<<array3<<endl;}復(fù)制array1到array3,空間不夠,會(huì)有運(yùn)行時(shí)錯(cuò)誤按實(shí)際數(shù)組大小,復(fù)制array1到array3,沒(méi)有問(wèn)題運(yùn)行結(jié)果:Thestringinarray1is:HappyBirthdaytoYouThestringinarray2is:HappyBirthdaytoYouThestringinarray3is:HappyBirthday(三)指針與數(shù)組指針和數(shù)組數(shù)組名本身就是地址指針和數(shù)組名聯(lián)系起來(lái),可通過(guò)指針訪問(wèn)數(shù)組雖然一維數(shù)組名和二維數(shù)組名都是地址,都可以看做某種指針,但是指針的類(lèi)型是不同的通過(guò)指針訪問(wèn)一維數(shù)組和二維數(shù)組的方法是不同的C++語(yǔ)言程序設(shè)計(jì)52(三)指針與數(shù)組一維數(shù)組名可以看做指針,它具有以下特點(diǎn):指針的類(lèi)型是指向數(shù)組元素的指針數(shù)組名也是數(shù)組第一個(gè)元素的地址對(duì)于數(shù)組A來(lái)說(shuō),數(shù)組名A和&A[0]具有相同的類(lèi)型和相同的值通過(guò)數(shù)組名的間接引用運(yùn)算,如*A,就可以訪問(wèn)數(shù)組的第一個(gè)元素A[0]數(shù)組名所包含的地址值是不可改變的,是一種常量指針C++語(yǔ)言程序設(shè)計(jì)53(三)指針與數(shù)組通過(guò)指針訪問(wèn)一維數(shù)組首先聲明一個(gè)和數(shù)組類(lèi)型相同的指針,并且用數(shù)組名來(lái)對(duì)指針初始化例如:intA[10],*pa=A;通過(guò)數(shù)組名或者所定義的指針變量,用多種方式訪問(wèn)數(shù)組元素?cái)?shù)組名和下標(biāo),如:A[0]、A[4]指針和下標(biāo),如:pa[0]、pa[4]。指針加偏移量的間接引用,如:*(pa+0)、*(pa+4)。數(shù)組名加偏移量的間接引用,如:*(A+0)、*(A+4)。指針自加后的間接引用,如:*pa++注意:不允許數(shù)組名自加后的間接引用來(lái)訪問(wèn)數(shù)組元素,如*A++C++語(yǔ)言程序設(shè)計(jì)54(三)指針與數(shù)組例:求整型數(shù)組的平均值C++語(yǔ)言程序設(shè)計(jì)55//通過(guò)指針求整型數(shù)組的平均值#include<iostream>usingnamespacestd;voidmain(){intintArray[10]={8,11,23,34,45,56,65,78,86,97},*ptint;inti,num,sum;floataverage;
ptint=intArray;
//指針初始化
sum=0;num=sizeof(intArray)/sizeof(*intArray);//求數(shù)組元素的數(shù)目指針初始化求數(shù)組元素?cái)?shù)目(三)指針與數(shù)組例:求整型數(shù)組的平均值C++語(yǔ)言程序設(shè)計(jì)56for(i=0;i<num;i++)sum=sum+*ptint++;average=(float)sum/num;ptint=intArray; //指針再次初始化
cout<<"數(shù)組元素是:\n";for(i=0;i<num;i++)cout<<*ptint++<<"";cout<<"\n平均值是:"<<average<<endl;}需要對(duì)指針重新初始化注意:在使用“指針自加間接引用”的方法訪問(wèn)一維數(shù)組時(shí),指針本身的地址值是變化的運(yùn)行結(jié)果:數(shù)組元素是:8112334455665788697平均值是:50.3(三)指針與數(shù)組指針數(shù)組若數(shù)組元素是某種類(lèi)型的指針,稱(chēng)這樣的數(shù)組為指針數(shù)組聲明格式:<類(lèi)型>*<數(shù)組名>[常量表達(dá)式];例如:char*member_name[10];字符指針數(shù)組:例如:char*member_name[]={"Merry","John","Hill"};數(shù)組元素指向一些不同長(zhǎng)度的字符串如果用一個(gè)指針指向這樣的數(shù)組,則能夠通過(guò)指針來(lái)訪問(wèn)其中的字符串C++語(yǔ)言程序設(shè)計(jì)57(三)指針與數(shù)組例:指針數(shù)組及其訪問(wèn)程序C++語(yǔ)言程序設(shè)計(jì)58//指針數(shù)組及其訪問(wèn)程序#include<iostream>usingnamespacestd;voidmain(){
char*member_name[]={"Merry","John","Hill"};cout<<"Thenamelistshowas:\n";for(inti=0;i<3;++i) cout<<member_name[i]<<'\n';}運(yùn)行結(jié)果:Thenamelistshow
as:MerryJohnHill(三)指針與數(shù)組指針數(shù)組作main函數(shù)的形參為了在運(yùn)行C++程序時(shí),可以由用戶(hù)提供執(zhí)行程序所需要的參數(shù),可以在程序中使用C++命令行參數(shù)命令行參數(shù)是main函數(shù)的參數(shù)帶有命令行參數(shù)的main函數(shù)的原型是:
<類(lèi)型>main(intargc,char*argv[]);argc:整數(shù),存放命令行參數(shù)的數(shù)目,由程序自動(dòng)統(tǒng)計(jì),包括所執(zhí)行的程序名argv[]:指針數(shù)組,存放所輸入的命令行參數(shù)
指針數(shù)組中存放各個(gè)字符串的地址
argv[0]是所執(zhí)行的程序名
argv[argc-1]是最后一個(gè)輸入的參數(shù)字符串
argv[argc]中自動(dòng)的存入NULL,表示輸入結(jié)束C++語(yǔ)言程序設(shè)計(jì)59(三)指針與數(shù)組例:顯示命令行參數(shù)C++語(yǔ)言程序設(shè)計(jì)60//顯示命令行參數(shù)#include<iostream>usingnamespacestd;voidmain(intargc,char*argv[]){cout<<"共輸入了"<<argc<<"個(gè)參數(shù),分別是:\n";for(inti=0;i<argc;++i)cout<<argv[i]<<'';}(三)指針與數(shù)組二維數(shù)組名可以看做指針,它具有以下特點(diǎn):二維數(shù)組可以看成是一維數(shù)組的一維數(shù)組對(duì)二維數(shù)組B[3][4],數(shù)組名B的地址,是其中第一個(gè)一維數(shù)組B[0]的地址,B+1就是下一個(gè)一維數(shù)組B[1]的地址數(shù)組名B是指向一維數(shù)組的指針,所指向的一維數(shù)組的大小是4數(shù)組名C是指向一維數(shù)組的指針,所指向的一維數(shù)組的大小是2C++語(yǔ)言程序設(shè)計(jì)61(三)指針與數(shù)組通過(guò)指針訪問(wèn)二維數(shù)組首先聲明一個(gè)指向一維數(shù)組的指針,并且用數(shù)組名來(lái)對(duì)指針初始化格式:<類(lèi)型名>(*指針變量名)[一維數(shù)組大小];前例:char(*ptchb)[4],(*ptchc)[2];
ptchb=B;ptchc=C;ptchb指向一維數(shù)組B[0],ptchb+1就是指向一維數(shù)組B[1]*ptchb仍然是地址,是一維數(shù)組B[0]第一個(gè)元素B[0][0]的地址*ptchb+1是B[0][1]的地址用指向一維數(shù)組指針訪問(wèn)第i行j列的數(shù)組元素:*(*(指針名+i)+j)C++語(yǔ)言程序設(shè)計(jì)62(三)指針與數(shù)組例:用單循環(huán)程序,求二維數(shù)組元素的平均值C++語(yǔ)言程序設(shè)計(jì)63//用單循環(huán)程序,求二維數(shù)組元素的平均值#include<iostream>usingnamespacestd;voidmain(){intdArray[3][4]={32,42,12,25,56,76,46,53,76,89,96,82};int(*pt)[4]=NULL;intsum,j;floataverage;sum=0;(三)指針與數(shù)組例:用單循環(huán)程序,求二維數(shù)組元素的平均值C++語(yǔ)言程序設(shè)計(jì)64//用單循環(huán)程序,求二維數(shù)組元素的平均值
pt=dArray;
//指向一維數(shù)組指針的初始化
j=sizeofdArray/sizeof**dArray; //**dArray就是元素dArray[0][0]for(inti=0;i<j;i++) sum=sum+*(*pt+i);average=(float)sum/j;cout<<"數(shù)據(jù)的平均值等于:"<<average<<endl;}運(yùn)行結(jié)果:數(shù)據(jù)的平均值等于:57.0833分析:程序把二維數(shù)組dArray看成是一維數(shù)組一維數(shù)組的首地址是*pt(*dArray)數(shù)組元素的地址是*pt+i(0≤i<j)(四)指針與結(jié)構(gòu)體定義指向結(jié)構(gòu)體類(lèi)型的指針變量例如:structstudent{longnum;charname[20];floatscore;};
student*ps=NULL;結(jié)構(gòu)指針初始化將結(jié)構(gòu)變量的地址賦給結(jié)構(gòu)指針
例如: studentstu={20041118,"LiLi",81};
student*ps=&stu;用new運(yùn)算符申請(qǐng)的動(dòng)態(tài)內(nèi)存空間的地址對(duì)指針賦值
例如:student*ps=newstudent; C++語(yǔ)言程序設(shè)計(jì)65(四)指針與結(jié)構(gòu)體用結(jié)構(gòu)指針訪問(wèn)結(jié)構(gòu)成員用點(diǎn)操作符“.”
例如:cout<<(*ps).score<<endl;用箭頭操作符“->”代替原來(lái)的點(diǎn)操作符
例如:cout<<ps->score<<endl; C++語(yǔ)言程序設(shè)計(jì)66(四)指針與結(jié)構(gòu)體例:結(jié)構(gòu)指針的定義和使用C++語(yǔ)言程序設(shè)計(jì)67//結(jié)構(gòu)指針的定義和使用#include<iostream>#include<cstring>usingnamespacestd;structEmployee{charname[20];unsignedlongid;floatsalary;};voidmain(){
Employee*prPtr=newEmployee;
strcpy(prPtr->name,"zhangsan");
prPtr->id=98001;
prPtr->salary=3350.0;cout<<prPtr->name<<""<<prPtr->id<<""<<prPtr->salary<<endl;
deleteprPtr;}運(yùn)行結(jié)果:zhangsan980013350(四)指針與結(jié)構(gòu)體例:通過(guò)使用結(jié)構(gòu)體指針數(shù)組完成結(jié)構(gòu)體數(shù)組的排序在第4章結(jié)構(gòu)體排序的例子中冒泡排序排序時(shí),直接交換結(jié)構(gòu)體變量,需要較大的工作量在本例中定義一個(gè)相應(yīng)的結(jié)構(gòu)體指針數(shù)組,每個(gè)元素是結(jié)構(gòu)體變量的地址冒泡排序排序時(shí),用交換指針來(lái)代替交換結(jié)構(gòu)體變量,可以提高程序運(yùn)行效率例如:pA[0]=&allone[0],pA[1]=&allone[1]
當(dāng)需要交換數(shù)組元素allone[0]和allone[1]時(shí),只將指針數(shù)組的pA[0]和pA[1]交換最后,按照結(jié)構(gòu)體指針數(shù)組元素的順序,訪問(wèn)和輸出排序后的結(jié)構(gòu)體C++語(yǔ)言程序設(shè)計(jì)68(四)指針與結(jié)構(gòu)體例:通過(guò)使用結(jié)構(gòu)體指針數(shù)組完成結(jié)構(gòu)體數(shù)組的排序C++語(yǔ)言程序設(shè)計(jì)69#include<iostream>#include<iomanip>usingnamespacestd;structEmployee{charname[20];unsignedlongid;floatsalary;}; //定義結(jié)構(gòu)體類(lèi)型Employeeallone[6]={{"zhang",12345,3390.0}, {"wang",13916,4490.0},{"zhou",27519,3110.0},{"meng",42876,6230.0},{"yang",23987,4000.0},{"chen",12335,5110.0}};
//定義結(jié)構(gòu)體數(shù)組//通過(guò)使用結(jié)構(gòu)體指針數(shù)組完成結(jié)構(gòu)體數(shù)組的排序(四)指針與結(jié)構(gòu)體例:通過(guò)使用結(jié)構(gòu)體指針數(shù)組完成結(jié)構(gòu)體數(shù)組的排序C++語(yǔ)言程序設(shè)計(jì)70voidmain(){Employee*pA[6]={&allone[0],&allone[1],&allone[2], //指針數(shù)組
&allone[3],&allone[4],&allone[5]};
Employee*temp;for(inti=1;i<6;i++){ //排序
for(intj=0;j<=5-i;j++){ //一輪比較
if(pA[j]->salary>pA[j+1]->salary){ //比較工資成員
temp=pA[j]; //指針變量的交換
pA[j]=pA[j+1]; pA[j+1]=temp;}}}(四)指針與結(jié)構(gòu)體例:通過(guò)使用結(jié)構(gòu)體指針數(shù)組完成結(jié)構(gòu)體數(shù)組的排序C++語(yǔ)言程序設(shè)計(jì)71for(intk=0;k<6;k++) //輸出
cout<<setiosflags(ios::left) <<setw(6)<<pA[k]->name <<setw(10)<<pA[k]->id <<setw(5)<<pA[k]->salary<<endl;}(四)指針與結(jié)構(gòu)體鏈表是通過(guò)指針鏈接在一起的一組數(shù)據(jù)項(xiàng),是一種非常有用的動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)項(xiàng):鏈表結(jié)點(diǎn)用結(jié)構(gòu)體類(lèi)型表示結(jié)點(diǎn)數(shù)據(jù):存儲(chǔ)當(dāng)前數(shù)據(jù)結(jié)點(diǎn)鏈接指針:指向下一結(jié)點(diǎn),表尾結(jié)點(diǎn)的鏈接指針值為0(NULL)每個(gè)結(jié)點(diǎn)是在需要時(shí)建立的,是動(dòng)態(tài)分配內(nèi)存的鏈表的結(jié)點(diǎn)在邏輯上是連續(xù)的,但在內(nèi)存中不是連續(xù)存放的單向鏈表:鏈表以指向第一個(gè)結(jié)點(diǎn)的指針開(kāi)始,每個(gè)結(jié)點(diǎn)包含下一個(gè)順序結(jié)點(diǎn)的指針,鏈表在結(jié)點(diǎn)的指針為0(NULL)時(shí)終止C++語(yǔ)言程序設(shè)計(jì)72(四)指針與結(jié)構(gòu)體例:?jiǎn)蜗蜴湵淼慕++語(yǔ)言程序設(shè)計(jì)73structstudent//聲明新的數(shù)據(jù)類(lèi)型{longnum; //學(xué)號(hào)
charname[20];//姓名
floatscore;//成績(jī)
student*next;//指向下一個(gè)學(xué)生的指針};//單向鏈表的建立#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){stud
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 六盤(pán)水職業(yè)技術(shù)學(xué)院《典型零件的工藝設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 金肯職業(yè)技術(shù)學(xué)院《微機(jī)原理含實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 新蘇教版一年級(jí)下冊(cè)數(shù)學(xué)第1單元第3課時(shí)《8、7加幾》作業(yè)
- 懷化學(xué)院《影視創(chuàng)作前沿技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖北理工學(xué)院《人力資源管理咨詢(xún)與診斷》2023-2024學(xué)年第一學(xué)期期末試卷
- 資陽(yáng)口腔職業(yè)學(xué)院《測(cè)試與傳感器技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)黨員聯(lián)系群眾、服務(wù)群眾制度
- 長(zhǎng)沙學(xué)院《材料加工過(guò)程多尺度模擬》2023-2024學(xué)年第一學(xué)期期末試卷
- 寒露節(jié)氣策劃講座模板
- 職業(yè)導(dǎo)論-房地產(chǎn)經(jīng)紀(jì)人《職業(yè)導(dǎo)論》名師預(yù)測(cè)卷3
- 藝術(shù)品捐贈(zèng)協(xié)議
- 網(wǎng)絡(luò)安全系統(tǒng)運(yùn)維方案
- 2024年標(biāo)準(zhǔn)溝渠回填工程承包協(xié)議版B版
- 2024年專(zhuān)用:物業(yè)安全管理協(xié)議3篇
- 【公開(kāi)課】同一直線(xiàn)上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- 《政府采購(gòu)業(yè)務(wù)培訓(xùn)》課件
- 《醫(yī)療器械召回管理辦法》培訓(xùn)2024
- 網(wǎng)絡(luò)安全培訓(xùn)內(nèi)容課件
- 通信線(xiàn)路維護(hù)安全培訓(xùn)
- 專(zhuān)業(yè)微信小程序開(kāi)發(fā)協(xié)議范例版
- 高職組全國(guó)職業(yè)院校技能大賽(嬰幼兒照護(hù)賽項(xiàng))備賽試題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論