資源描述:
《結(jié)構(gòu)體指針、結(jié)構(gòu)體做函數(shù)參數(shù).ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)8.5.1指向結(jié)構(gòu)體變量的指針變量在定義一個(gè)結(jié)構(gòu)體變量時(shí),系統(tǒng)將在內(nèi)存中分配一塊連續(xù)的存儲(chǔ)空間,用于存放結(jié)構(gòu)體成員的數(shù)據(jù),這塊連續(xù)存儲(chǔ)空間的首地址稱為結(jié)構(gòu)體變量的指針(也稱為結(jié)構(gòu)體變量的首地址)??梢远x指向結(jié)構(gòu)體變量的指針變量,若把某結(jié)構(gòu)體變量的首地址賦值給一個(gè)指針變量,則稱這一指針變量指向該結(jié)構(gòu)體變量。指向結(jié)構(gòu)體的指針變量定義格式是:struct類型名*指針變量名;第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)如下面定義一個(gè)結(jié)構(gòu)體類型booktp來(lái)存儲(chǔ)書(shū)的基本信息:structbooktp{charname[60];charauthor[30];
2、floatprice;structdatetp{unsignedyear;unsignedmonth;}pubday;};可以定義結(jié)構(gòu)體變量和指向結(jié)構(gòu)體變量的指針:structbooktpbook5,*p;第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)以上定義了p為指向結(jié)構(gòu)體變量的指針變量。若p=&book5;,則稱指針變量p指向結(jié)構(gòu)體變量book5,此時(shí)可用下述三種方式之一存取結(jié)構(gòu)體成員(三種方式是等價(jià)的):1.結(jié)構(gòu)體變量名.成員名2.指針變量名->成員名3.(*指針變量名).成員名其中“->”是指向運(yùn)算符.如有下面程序段:structbooktp*p,book5={“C++Buide
3、r網(wǎng)絡(luò)開(kāi)發(fā)實(shí)例”,”清漢計(jì)算機(jī)工作室”,53,{2000,9}};p=&book5;則book5.price、p->price以及(*p).price的值都是53.0,而book5.pubday.year、p->pubday.year以及(*p).pubday.year的值都是2000。注意此處(*p),price的圓括號(hào)不能少.指針運(yùn)算符“*”作用于指針變量p上,構(gòu)成表達(dá)式(*p),等價(jià)于結(jié)構(gòu)體變量名book5。第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)8.5.2指向結(jié)構(gòu)體數(shù)組的指針變量指向結(jié)構(gòu)體的指針變量也可以指向結(jié)構(gòu)體數(shù)組及其元素。例如,下述程序段:structbooktp*p
4、,book[3];p=book;如圖8.20所示,圖中假定book[0]的地址是3000,指針變量p指向結(jié)構(gòu)體數(shù)組book的首地址,由于sizeof(structbooktp)的值為98,每個(gè)結(jié)構(gòu)體元素占內(nèi)存空間98個(gè)字節(jié),因此p+l指向地址3098處,p+2指向地址3196處。98個(gè)字節(jié)98個(gè)字節(jié)98個(gè)字節(jié)pp+1p+2300030983196book[0]book[1]book[2]圖8.20第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)使用指針變量指向結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組時(shí),應(yīng)注意運(yùn)算符的優(yōu)先級(jí):1.“()”、”[]”、“->”、“.”四個(gè)運(yùn)算符優(yōu)先級(jí)相同,在C語(yǔ)言中具有最高的優(yōu)
5、先級(jí),運(yùn)算的結(jié)合方向是“從左到右”;2.“*”、“十十”、“一一”、“&”四個(gè)運(yùn)算符優(yōu)先級(jí)相同,在C語(yǔ)言優(yōu)先級(jí)的級(jí)別僅次于上述的四個(gè)運(yùn)算符,運(yùn)算的結(jié)合方向是“從右到左”。[例8.16]通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用。在程序中,為了說(shuō)明運(yùn)算符的優(yōu)先級(jí)和結(jié)合方向的用法,改變了書(shū)的價(jià)格。main(){structdatetp{unsignedyear;unsignedmonth;};/*出版日期*/第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)structbooktp{charname[60];/*書(shū)名*/charauthor[30];/*作者*/floatprice;/*價(jià)
6、格*/structdatetppubday;};structbooktp*p,book[3]={{“C++Buider網(wǎng)絡(luò)開(kāi)發(fā)實(shí)例”,”清漢計(jì)算機(jī)工作室”,53.0,{2000,9}},{“SQLServer循序漸進(jìn)教程”,”P(pán)etkovic”,35.0,{1999,6}},{“VB開(kāi)發(fā)指南”,”DianneSiebold”,28.0,{2000,9}}};p=book;printf(”%8.2f,”,++p->price);/*橙色表達(dá)式等價(jià)于++(p->price)*/第8章用戶自定義數(shù)據(jù)類型——指針與結(jié)構(gòu)printf(”%8.2f,”,(++p)->price);/*先計(jì)算
7、++p,p指向book[l]*/printf(”%8.2f,”,p++->price);/*上述表達(dá)式等價(jià)于(p++)->price*/printf(“%8.2f\n”,p->price++);/*上述表達(dá)式等價(jià)于(p->price)++*/for(p=book;pname,(*p).author,p->pubday.year,p->pu