資源描述:
《《c進(jìn)階指針結(jié)構(gòu)體》PPT課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、C語言進(jìn)階11.數(shù)據(jù)在內(nèi)存中的存儲(chǔ)(2)地址:存儲(chǔ)單元的編號(hào)2000200120022003200420052006200720082009(1)變量定義:為變量分配存儲(chǔ)單元,并記錄變量名與存儲(chǔ)單元地址之間的對(duì)應(yīng)關(guān)系。如:inti,j,k;i=3,j=6,k=9;ijk369一、指針(3)內(nèi)容:存儲(chǔ)單元中存放的數(shù)據(jù)2指針:變量在內(nèi)存儲(chǔ)單元的起始地址。指針變量:用來存放地址的變量。定義方法:基類型標(biāo)識(shí)符*變量名;指向:通過地址建立起來的一種聯(lián)系。如:inti;/*定義了整型變量i*/int*p;/*定義指向整型變量i的指針變量p*/p=&i;/*將變量i的指針賦給指針變量p*/指針變量p指向整型
2、變量i。2.指針的概念變量名供用戶使用,如i,j,k。存儲(chǔ)單元地址供系統(tǒng)使用,如:2000,2002,2004。33.變量的訪問方式直接訪問:直接通過變量的地址或變量名(系統(tǒng)會(huì)自動(dòng)將變量名轉(zhuǎn)換成變量的地址)進(jìn)行訪問,如:scanf(“%d”,&a);或:a=78;a200078間接訪問:將變量的地址存放在一個(gè)指針變量中,通過指針變量對(duì)變量進(jìn)行訪問。inta,*p;p=&a;ap200078200220007844.指針運(yùn)算符和指針變量的引用取地址運(yùn)算符號(hào)&:用法:&變量名功能:取變量的地址優(yōu)先級(jí):僅次于括號(hào)類結(jié)合性:右(單目運(yùn)算)指針(間接訪問)運(yùn)算符號(hào)*:用法:*指針變量名功能:取地址中的值
3、結(jié)合性:右(單目運(yùn)算符)優(yōu)先級(jí):僅次于括號(hào)類注意:1.定義指針變量時(shí)的“*”與其它位置出現(xiàn)的“*”含義不同2.&*a等價(jià)于a,a是一個(gè)指針變量;*&a等價(jià)于a,a是任何類型的簡(jiǎn)單變量。5如:inta,b,*p;(1)為指針變量賦值指針變量名=地址;例如p=&a;(2)為指針變量所指向的存儲(chǔ)單元賦值*指針變量名=表達(dá)式;例如*p=78;等價(jià)于:a=78;使用指針變量所指向的變量中的數(shù)據(jù)變量名=*指針變量名;例如b=*p+4;等價(jià)于:b=a+4;注意:*p與a等價(jià)指針變量的引用6main(){inta,b,*p1,*p2,*p;scanf(“%d,%d”,&a,&b);printf(“a=%d,b
4、=%d”,a,b);p1=&a;p2=&b;}例1使用指針將兩個(gè)數(shù)按升序排序1abp1p2p200020022000200253這是兩個(gè)指針變量的值進(jìn)行交換,而不是兩個(gè)變量a和b的值進(jìn)行交換,應(yīng)輸出*p1和*p2if(a>b){p=p1;p1=p2;p2=p;}printf(“min=%d,max=%d”,a,b);20022000*p1,*p2);7例1使用指針將兩個(gè)數(shù)按升序排序2main(){inta,b,*p1,*p2,t;scanf(“%d,%d”,&a,&b);p1=&a;p2=&b;printf(“a=%d,b=%d”,a,b);}abp1p2t200020022000
5、200253if(a>b){t=*p1;*p1=*p2;*p2=t;}printf(“min=%d,max=%d”,a,b);這是兩個(gè)指針變量所指向的存儲(chǔ)單元的值進(jìn)行交換,是變量a和b的值進(jìn)行交換,可直接輸出a和b的值3558結(jié)構(gòu)體定義結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量的引用結(jié)構(gòu)體類型變量的初始化結(jié)構(gòu)體數(shù)組二、結(jié)構(gòu)體9有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體,以便于引用。如一個(gè)學(xué)生錄取有下面信息:學(xué)號(hào)/姓名/性別/年齡/地址等屬性intnum;charname[20];charsex;intage;charaddr[30];應(yīng)當(dāng)把它們組織成一個(gè)組合項(xiàng),在這個(gè)組合項(xiàng)中包含若干個(gè)不同類型(
6、當(dāng)然也可以相同)的數(shù)據(jù)項(xiàng)。100101LiFunM1887.5luoyangNumnamesexagescoreaddr(一)結(jié)構(gòu)體概述C語言允許用戶自定義這樣的結(jié)構(gòu)類型,稱為結(jié)構(gòu)體。一個(gè)結(jié)構(gòu)體類型的變量中可以獨(dú)立存放多種類型的數(shù)據(jù)。10(二)結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義結(jié)構(gòu)體類型是一種新的數(shù)據(jù)類型,系統(tǒng)沒有確定的結(jié)構(gòu)體類型,用戶要根據(jù)需要,自定義某種特定的結(jié)構(gòu)體類型,因此,結(jié)構(gòu)體變量的定義與一般變量不同,需要先定義結(jié)構(gòu)體類型后,再定義結(jié)構(gòu)體變量。11一般形式:struct結(jié)構(gòu)體名{成員表列};結(jié)構(gòu)體名類型名成員名1.結(jié)構(gòu)體類型的定義不要忽略最后的分號(hào)!注意如:structstudent{in
7、tnum;charname[20];charsex;intage;floatscore;charaddr[30];};這樣只是指定了一個(gè)結(jié)構(gòu)體類型,它相當(dāng)于一種數(shù)據(jù)類型,但其中并無具體數(shù)據(jù),系統(tǒng)對(duì)之也不分配實(shí)際內(nèi)存單元??梢远x結(jié)構(gòu)體類型變量,存放不同類型的數(shù)據(jù)組合成的一組數(shù)據(jù)。說明12例如:structstudent{intnum;charname[20];charsex;intage;floa