




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一維數(shù)組是指針,可將二維數(shù)組看作是指針的指針:每一行是一個(gè)一維數(shù)組,而列是指向行的指針。在動(dòng)態(tài)創(chuàng)建時(shí),先分配指向行的指針空間,再循環(huán)維每一行申請(qǐng)空間。#include using namespace std;int main()/34 /三行四列的二維數(shù)組int x,y;int i,n,k;x=3;y=4;int *p;p = new int*x; /行 /申請(qǐng)行的空間/每行的列申請(qǐng)空間for(i=0; ix;i+)pi = new int y;/賦值,k=0;for(i=0;ix;i+)for(n=0;ny;n+)pin = k;k+;/顯示剛才的賦值for(i=0;ix;i+)for(n=
2、0;ny;n+)cout pin t;cout endl;/刪除剛才申請(qǐng)的內(nèi)存for(i=0;ix;i+)delete pi;delete p;return 0;今天歸納總結(jié)了一下,希望以后的朋友可以少走些彎路:) 一 :關(guān)于指針和堆的內(nèi)存分配 先來(lái)介紹一下指針 :指針一種類型,理論上來(lái)說(shuō)它包含其他變量的地址,因此有的書上也叫它:地址變量。既然指針是一個(gè)類型,是類型就有大小,在達(dá)內(nèi)的服務(wù)器上或者普通的 機(jī)上,都是個(gè)字節(jié)大小,里邊只是存儲(chǔ)了一個(gè)變量的地址而已。不管什么類型的指針,char * ,int * ,int (*) ,string * ,float * ,都是說(shuō)明了本指針?biāo)赶虻牡刂房臻g
3、是什么類型而已,了解了這個(gè)基本上所有的問(wèn)題都好象都變的合理了。 在C+中,申請(qǐng)和釋放堆中分配的存貯空間,分別使用new和delete的兩個(gè)運(yùn)算符來(lái)完成: 指針類型指針變量名=new 指針類型 (初始化); delete 指針名; 例如:1、 int *p=new int(0); 它與下列代碼序列大體等價(jià): 2、int tmp=0, *p=&tmp; 區(qū)別:p所指向的變量是由庫(kù)操作符new()分配的,位于內(nèi)存的堆區(qū)中,并且該對(duì)象未命名。 下面是關(guān)于new 操作的說(shuō)明:部分引自 1、new運(yùn)算符返回的是一個(gè)指向所分配類型變量(對(duì)象)的指針。對(duì)所創(chuàng)建的變量或?qū)ο?,都是通過(guò)該指針來(lái)間接操作的,而動(dòng)態(tài)創(chuàng)
4、建的對(duì)象本身沒有名字。 2、一般定義變量和對(duì)象時(shí)要用標(biāo)識(shí)符命名,稱命名對(duì)象,而動(dòng)態(tài)的稱無(wú)名對(duì)象(請(qǐng)注意與棧區(qū)中的臨時(shí)對(duì)象的區(qū)別,兩者完全不同:生命期不同,操作方法不同,臨時(shí)變量對(duì)程序員是透明的)。 3、堆區(qū)是不會(huì)在分配時(shí)做自動(dòng)初始化的(包括清零),所以必須用初始化式(initializer)來(lái)顯式初始化。new表達(dá)式的操作序列如下:從堆區(qū)分配對(duì)象,然后用括號(hào)中的值初始化該對(duì)象。 下面是從堆中申請(qǐng)數(shù)組 1、申請(qǐng)數(shù)組空間: 指針變量名=new 類型名下標(biāo)表達(dá)式; 注意:“下標(biāo)表達(dá)式”不是常量表達(dá)式,即它的值不必在編譯時(shí)確定,可以在運(yùn)行時(shí)確定。這就是堆的一個(gè)非常顯著的特點(diǎn),有的時(shí)候程序員本身都不知道
5、要申請(qǐng)能夠多少內(nèi)存的時(shí)候,堆就變的格外有用。 2、釋放數(shù)組空間: delete 指向該數(shù)組的指針變量名; 注意:方括號(hào)非常重要的,如果delete語(yǔ)句中少了方括號(hào),因編譯器認(rèn)為該指針是指向數(shù)組第一個(gè)元素的,會(huì)產(chǎn)生回收不徹底的問(wèn)題(只回收了第一個(gè)元素所 占空間),我們通常叫它“內(nèi)存泄露”,加了方括號(hào)后就轉(zhuǎn)化為指向數(shù)組的指針,回收整個(gè)數(shù)組。delete 的方括號(hào)中不需要填數(shù)組元素?cái)?shù),系統(tǒng)自知。即使寫了,編譯器也忽略。上說(shuō)過(guò)以前的delete 方括號(hào)中是必須添加個(gè)數(shù)的,后來(lái)由于很容易出錯(cuò),所以后來(lái)的版本就改進(jìn)了這個(gè)缺陷。 下面是個(gè)例子,VC上編譯通過(guò) #include using namespace
6、 std; /#include /for VC #include void main() int n; char *p; cout請(qǐng)輸入動(dòng)態(tài)數(shù)組的元素個(gè)數(shù)n; /n在運(yùn)行時(shí)確定,可輸入17 p=new charn; /申請(qǐng)17個(gè)字符(可裝8個(gè)漢字和一個(gè)結(jié)束符)的內(nèi)存空間strcpy(pc,“堆內(nèi)存的動(dòng)態(tài)分配”);/ coutpendl; delete p;/釋放pc所指向的n個(gè)字符的內(nèi)存空間return ; 通過(guò)指針使堆空間,編程中的幾個(gè)可能問(wèn)題 動(dòng)態(tài)分配失敗。返回一個(gè)空指針(NULL),表示發(fā)生了異常,堆資源不足,分配失敗。 data = new double m; /申請(qǐng)空間 if (da
7、ta ) = 0) /或者=NULL 指針刪除與堆空間釋放。刪除一個(gè)指針p(delete p;)實(shí)際意思是刪除了p所指的目標(biāo)(變量或?qū)ο蟮龋尫帕怂嫉亩芽臻g,而不是刪除本身,釋放堆空間后,成了空懸指針,不能再通過(guò)p使用該空間,在重新給p賦值前,也不能再直接使用p。 內(nèi)存泄漏(memory leak)和重復(fù)釋放。new與delete 是配對(duì)使用的, delete只能釋放堆空間。如果new返回的指針值丟失,則所分配的堆空間無(wú)法回收,稱內(nèi)存泄漏,同一空間重復(fù)釋放也是危險(xiǎn)的,因?yàn)樵摽臻g可能已另分 配,而這個(gè)時(shí)候又去釋放的話,會(huì)導(dǎo)致一個(gè)很難查出來(lái)的運(yùn)行時(shí)錯(cuò)誤。所以必須妥善保存new返回的指針,以保
8、證不發(fā)生內(nèi)存泄漏,也必須保證不會(huì)重復(fù)釋放堆內(nèi) 存空間。 動(dòng)態(tài)分配的變量或?qū)ο蟮纳凇o(wú)名變量的生命期并不依賴于建立它的作用域,比如在函數(shù)中建立的動(dòng)態(tài)對(duì)象在函數(shù)返回后仍可使用。我們也稱堆空間為自由 空間(free store)就是這個(gè)原因。但必須記住釋放該對(duì)象所占堆空間,并只能釋放一次,在函數(shù)內(nèi)建立,而在函數(shù)外釋放是一件很容易失控的事,往往會(huì)出錯(cuò),所以永遠(yuǎn) 不要在函數(shù)體內(nèi)申請(qǐng)空間,讓調(diào)用者釋放,這是一個(gè)很差的做法。你再怎么小心翼翼也可能會(huì)帶來(lái)錯(cuò)誤。 類在堆中申請(qǐng)內(nèi)存 : 通過(guò)new建立的對(duì)象要調(diào)用構(gòu)造函數(shù),通過(guò)deletee刪除對(duì)象要調(diào)用析構(gòu)函數(shù)。 CGoods *pc; pc=new CGo
9、ods; /分配堆空間,并構(gòu)造一個(gè)無(wú)名對(duì)象 /的CGoods對(duì)象; . delete pc; /先析構(gòu),然后將內(nèi)存空間返回給堆; 堆對(duì)象的生命期并不依賴于建立它的作用域,所以除非程序結(jié)束,堆對(duì)象(無(wú)名對(duì)象)的生命期不會(huì)到期,并且需要顯式地用delete語(yǔ)句析構(gòu)堆對(duì)象,上面的 堆對(duì)象在執(zhí)行delete語(yǔ)句時(shí),C+自動(dòng)調(diào)用其析構(gòu)函數(shù)。 正因?yàn)闃?gòu)造函數(shù)可以有參數(shù),所以new后面類(class)類型也可以有參數(shù)。這些參數(shù)即構(gòu)造函數(shù)的參數(shù)。 但對(duì)創(chuàng)建數(shù)組,則無(wú)參數(shù),并只調(diào)用缺省的構(gòu)造函數(shù)。見下例類說(shuō)明: class CGoods char Name21; int Amount; float Price;
10、 float Total_value; public: CGoods(); /缺省構(gòu)造函數(shù)。因已有其他構(gòu)造函數(shù),系統(tǒng)不會(huì)再自動(dòng)生成缺省構(gòu)造,必須顯式聲明。 CGoods(char* name,int amount ,float price) strcpy(Name,name); Amount=amount; Price=price; Total_value=price*amount; ;/類聲明結(jié)束 下面是調(diào)用機(jī)制: void main() int n; CGoods *pc,*pc1,*pc2; pc=new CGoods(“hello”,10,118000); /調(diào)用三參數(shù)構(gòu)造函數(shù) pc1
11、=new CGoods(); /調(diào)用缺省構(gòu)造函數(shù) cout”輸入商品類數(shù)組元素?cái)?shù)”n; pc2=new CGoodsn; /動(dòng)態(tài)建立數(shù)組,不能初始化,調(diào)用n次缺省構(gòu)造函數(shù) delete pc; delete pc1; delete pc2; 申請(qǐng)堆空間之后構(gòu)造函數(shù)運(yùn)行; 釋放堆空間之前析構(gòu)函數(shù)運(yùn)行; 再次強(qiáng)調(diào):由堆區(qū)創(chuàng)建對(duì)象數(shù)組,只能調(diào)用缺省的構(gòu)造函數(shù),不能調(diào)用其他任何構(gòu)造函數(shù)。如果沒有缺省的構(gòu)造函數(shù),則不能創(chuàng)建對(duì)象數(shù)組。 -下面我們?cè)賮?lái)看一下指針數(shù)組和數(shù)組指針 如果你想了解指針最好理解以下的公式 : (1)int*ptr;/指針?biāo)赶虻念愋褪莍nt (2)char*ptr;/指針?biāo)赶虻牡念?/p>
12、型是char (3)int*ptr;/指針?biāo)赶虻牡念愋褪莍nt* (也就是一個(gè)int * 型指針) (4)int(*ptr)3;/指針?biāo)赶虻牡念愋褪莍nt()3 /二維指針的聲明 ()指針數(shù)組:一個(gè)數(shù)組里存放的都是同一個(gè)類型的指針,通常我們把他叫做指針數(shù)組。 比如 int * a10;它里邊放了個(gè)int * 型變量,由于它是一個(gè)數(shù)組,已經(jīng)在棧區(qū)分配了個(gè)(int * )的空間,也就是位機(jī)上是個(gè)byte,每個(gè)空間都可以存放一個(gè)int型變量的地址,這個(gè)時(shí)候你可以為這個(gè)數(shù)組的每一個(gè)元素初始化,在,或者單獨(dú)做 個(gè)循環(huán)去初始化它。 例子: int * a2= new int(3),new int(4)
13、 ; /在棧區(qū)里聲明一個(gè)int * 數(shù)組,它的每一個(gè)元素都在堆區(qū)里申請(qǐng)了一個(gè)無(wú)名變量,并初始化他們?yōu)楹?,注意此種聲明方式具有缺陷,VC下會(huì)報(bào)錯(cuò) 例如: int * a2=new int3,new int3; delete a0; delet a10; 但是我不建議達(dá)內(nèi)的學(xué)生這么寫,可能會(huì)造成歧義,不是好的風(fēng)格,并且在VC中會(huì)報(bào)錯(cuò),應(yīng)該寫成如下: int * a2; a0= new int3; a1=new int3; delete a0; delet a10; 這樣申請(qǐng)內(nèi)存的風(fēng)格感覺比較符合大家的習(xí)慣;由于是數(shù)組,所以就不可以delete a;編譯會(huì)出警告.delete a1; 注意這里 是一
14、個(gè)數(shù)組,不能delete ; ( ) 數(shù)組指針: 一個(gè)指向一維或者多維數(shù)組的指針; int * b=new int10;指向一維數(shù)組的指針b ; 注意,這個(gè)時(shí)候釋放空間一定要delete ,否則會(huì)造成內(nèi)存泄露, b 就成為了空懸指針. int (*b2)10=new int1010; 注意,這里的b2指向了一個(gè)二維int型數(shù)組的首地址. 注意:在這里,b2等效于二維數(shù)組名,但沒有指出其邊界,即最高維的元素?cái)?shù)量,但是它的最低維數(shù)的元素?cái)?shù)量必須要指定!就像指向字符的指針,即等效一個(gè)字符串,不要把指向字符的指針說(shuō)成指向字符串的指針。這與數(shù)組的嵌套定義相一致。 int(*b3) 30 20; /三級(jí)指
15、針指向三維數(shù)組的指針; int (*b2) 20; /二級(jí)指針; b3=new int 1 20 30; b2=new int 30 20; 兩個(gè)數(shù)組都是由600個(gè)整數(shù)組成,前者是只有一個(gè)元素的三維數(shù)組,每個(gè)元素為30行20列的二維數(shù)組,而另一個(gè)是有30個(gè)元素的二維數(shù)組,每個(gè)元素為20個(gè)元素的一維數(shù)組。 刪除這兩個(gè)動(dòng)態(tài)數(shù)組可用下式: delete b3; /刪除(釋放)三維數(shù)組; delete b2; /刪除(釋放)二維數(shù)組; 再次重申:這里的b2的類型是int (*) ,這樣表示一個(gè)指向二維數(shù)組的指針。 b3表示一個(gè)指向(指向二維數(shù)組的指針)的指針,也就是三級(jí)指針. ( 3 ) 二級(jí)指針的指
16、針 看下例 : int (*p)2=new (int(*)3)2; p0=new int22; p1=new int22; p2=new int22; delete p0; delete p1; delete p2; delete p; 注意此地方的指針類型為int (*),碰到這種問(wèn)題就把外邊的2先去掉,然后回頭先把int * pnew int(*)n申請(qǐng)出來(lái),然后再把外邊的附加上去; p代表了一個(gè)指向二級(jí)指針的指針,在它申請(qǐng)空間的時(shí)候要注意指針的類型,那就是int (*)代表二級(jí)指針,而int (*)顧名思義就是代表指向二級(jí)指針的指針了。既然是指針要在堆里申請(qǐng)空間,那首先要定義它的范圍:(
17、int(*)n)2,n 個(gè)這樣的二級(jí)指針,其中的每一個(gè)二級(jí)指針的最低維是個(gè)元素.(因?yàn)橐_定一個(gè)二級(jí)指針的話,它的最低維數(shù)是必須指定的,上邊已經(jīng)提到)。然后我們又分別 為p0,p1,p2在堆里分配了空間,尤其要注意的是:在釋放內(nèi)存的時(shí)候一定要為p0,p1,p2,單獨(dú)delete ,否則又會(huì)造成內(nèi)存泄露,在deletep 的時(shí)候一定先delete p0; delete p1,然后再把給p申請(qǐng)的空間釋放掉 delete p 這樣會(huì)防止內(nèi)存泄露。 ()指針的指針; int * cc=new (int*)10; 聲明一個(gè)個(gè)元素的數(shù)組,數(shù)組每個(gè)元素都是一個(gè)int *指針,每個(gè)元素還可以單獨(dú)申請(qǐng)空間,因?yàn)?/p>
18、cc的類型是int*型的指針,所以你要在堆里申請(qǐng)的話就要用int *來(lái)申請(qǐng); 看下邊的例子 ( & GNU編譯器都已經(jīng)通過(guò)); int * a= new int * 2;/申請(qǐng)兩個(gè)int * 型的空間 a1=new int3;/為a的第二個(gè)元素又申請(qǐng)了個(gè)int 型空間,a1指向了此空間首地址處 a0=new int4;/為a的第一個(gè)元素又申請(qǐng)了個(gè)int 型空間,a0 指向了此空間的首地址處 int * b; a00=0; a01=1; b=a0; delete a0/一定要先釋放a0,a1的空間,否則會(huì)造成內(nèi)存泄露.; delete a1; delete a; b+; cout*bendl;
19、/隨機(jī)數(shù) 注意:因?yàn)閍 是在堆里申請(qǐng)的無(wú)名變量數(shù)組,所以在delete 的時(shí)候要用delete 來(lái)釋放內(nèi)存,但是a的每一個(gè)元素又單獨(dú)申請(qǐng)了空間,所以在delete a之前要先delete 掉 a0,a1,否則又會(huì)造成內(nèi)存泄露. () 指針數(shù)組: 我們?cè)賮?lái)看看第二種:二維指針數(shù)組 int *(*c)3=new int *32; 如果你對(duì)上邊的介紹的個(gè)種指針類型很熟悉的話,你一眼就能看出來(lái)c是個(gè)二級(jí)指針,只不過(guò)指向了一個(gè)二維int * 型的數(shù)組而已,也就是二維指針數(shù)組。 例子: int *(*b)10=new int*210;/ b00=new int100; b01=new int100; *b
20、00=1; cout *b00endl; /打印結(jié)果為 delete b00; delete b01; delete b; cout*b00endl; /打印隨機(jī)數(shù) 這里只為大家還是要注意內(nèi)存泄露的問(wèn)題,在這里就不再多說(shuō)了。 如果看了上邊的文章,大家估計(jì)就會(huì)很熟悉,這個(gè)b是一個(gè)二維指針,它指向了一個(gè)指針數(shù)組 第二種: int *d2;表示一個(gè)擁有兩個(gè)元素?cái)?shù)組,每一個(gè)元素都是int * 型,這個(gè)指向指針的指針:) d不管怎樣變終究也是個(gè)數(shù)組,呵呵, 如果你讀懂了上邊的,那下邊的聲明就很簡(jiǎn)單了: d0=new int *10; d1=new int * 10; delete d0; delete
21、d1; 具體的就不再多說(shuō)了 :) 二:函數(shù)指針 關(guān)于函數(shù)指針,我想在我們可能需要寫個(gè)函數(shù),這個(gè)函數(shù)體內(nèi)要調(diào)用另一個(gè)函數(shù),可是由于項(xiàng)目的進(jìn)度有限,我們不知道要調(diào)用什么樣的函數(shù),這個(gè)時(shí)候可能就需要一個(gè)函數(shù)指針; int a();這個(gè)一個(gè)函數(shù)的聲明; ing (*b)();這是一個(gè)函數(shù)指針的聲明; 讓我們來(lái)分析一下,左邊圓括弧中的星號(hào)是函數(shù)指針聲明的關(guān)鍵。另外兩個(gè)元素是函數(shù)的返回類型(void)和由邊圓括弧中的入口參數(shù)(本例中參數(shù)是空)。注 意本例中還沒有創(chuàng)建指針變量-只是聲明了變量類型。目前可以用這個(gè)變量類型來(lái)創(chuàng)建類型定義名及用sizeof表達(dá)式獲得函數(shù)指針的大小: unsigned psize
22、= sizeof (int (*) (); 獲得函數(shù)指針的大小 / 為函數(shù)指針聲明類型定義 typedef int (*PFUNC) (); PFUNC是一個(gè)函數(shù)指針,它指向的函數(shù)沒有輸入?yún)?shù),返回int。使用這個(gè)類型定義名可以隱藏復(fù)雜的函數(shù)指針語(yǔ)法,就我本人強(qiáng)烈建議我們大內(nèi)弟子使用這種方式來(lái)定義; 下面是一個(gè)例子,一個(gè)簡(jiǎn)單函數(shù)指針的回調(diào)(在GNU編譯器上通過(guò),在VC上需要改變一個(gè)頭文件就OK了) #include /GNU 編譯器 g+ 實(shí)現(xiàn) using namespace std; /* /vc 的實(shí)現(xiàn) #include stdafx.h #include */ #define DF(F)
23、 int F() coutthis is in function #Fendl; return 0; /聲明定義DF(F)替代 int F();函數(shù); DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g); DF(h); DF(i); /聲明定義函數(shù) a b c d e f g h i / int (*pfunc)(); /一個(gè)簡(jiǎn)單函數(shù)指針的聲明 typedef int(*FUNC)(); /一個(gè)函數(shù)指針類型的聲明 FUNC ff = a,b,c,d,e,f,g,h,i; /聲明一個(gè)函數(shù)指針數(shù)組,并初始化為以上聲明的a,b,c,d,e,f,g,h,i函數(shù) FUNC func3(FUNC vv) /定義函數(shù)func3,傳入一個(gè)函數(shù)指針,并且返回一個(gè)同樣類型的函數(shù)指針 vv(); return vv; /*FUNC func4(int (*vv)() /func3的另一種實(shí)現(xiàn) vv(); return vv; */ int main() for(int i=0;isi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 5 good manners study skills 教學(xué)設(shè)計(jì)2024-2025學(xué)年牛津譯林版八年級(jí)英語(yǔ)下冊(cè)
- 2020-2021深圳南山實(shí)驗(yàn)學(xué)校初中部小學(xué)四年級(jí)數(shù)學(xué)上期末第一次模擬試題帶答案
- 鋼軌彈性支撐施工方案
- 屋頂融雪裝置施工方案
- 醇油漆施工方案
- 樓體加固具體施工方案
- 入駐店鋪合同范本
- 業(yè)務(wù)拓展顧問(wèn)合同范例
- 產(chǎn)品質(zhì)量控制的年度措施計(jì)劃
- 乙方委托設(shè)計(jì)合同范本
- 四年級(jí)數(shù)學(xué)(小數(shù)加減運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 天津市建筑安全員-C證考試題庫(kù)
- 2025年皖北衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)參考答案
- 小學(xué)生春耕教學(xué)課件
- 2024年南信語(yǔ)文數(shù)學(xué)試卷(含答案)
- 2024年重慶市集中選調(diào)應(yīng)屆大學(xué)畢業(yè)生到基層工作考試真題
- 2025年個(gè)人投資合同電子版模板
- 車輛掛靠協(xié)議書
- 2025年湖南交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)1套
- 2017年公務(wù)員多省聯(lián)考《申論》真題(吉林甲級(jí)卷)及參考答案(含詳細(xì)解析)
- 一年級(jí)下冊(cè)健康成長(zhǎng)教案
評(píng)論
0/150
提交評(píng)論