資源描述:
《《結(jié)構(gòu)體與指針》PPT課件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、指向結(jié)構(gòu)體的指針定義結(jié)構(gòu)體的指針struct結(jié)構(gòu)體名*指針名;如:structStudent{charname[10];intage;};structStudents;structStudent*p;p=&s;用指針訪問結(jié)構(gòu)體的成員(*p).name(*p).age指向結(jié)構(gòu)體的指針用指針直接訪問結(jié)構(gòu)體的成員可以用“->”符號如上題中可以這樣訪問:p->namep->age以下三條語句是等價(jià)的:s.age=1;(*p).age=1;p->age=1;以下是錯誤的:p.name=“Jom”;p.age=5;s->name=“Jake”;s->age=10;p是一個指針,不是結(jié)構(gòu)體
2、變量,沒有“.”操作S是一個結(jié)構(gòu)體變量,不是指針,沒有“->”操作指向結(jié)構(gòu)體的指針structStudent{charname[20];intage;intsex;};編寫一個函數(shù)change(),實(shí)現(xiàn)兩個Student類型的變量的內(nèi)容交換指向結(jié)構(gòu)體的指針此題中,函數(shù)的形參若定義為:voidchange(structStudents1,structStudents2)則形參s1和s2將接收Student類型的實(shí)參,是實(shí)參的拷貝,對s1和s2進(jìn)行內(nèi)容交換,對實(shí)參,不會產(chǎn)生任何影響。因此,該函的形參應(yīng)該定義為:voidchange(structStudent*p1,structS
3、tudent*p2)形參p1和p2是Student類型的指針,將接收Student類型變量的地址,能夠通過p1和p2對實(shí)參所指向的Student類型變量進(jìn)行修改。voidchange(structstudent*s1,structstudent*s2){structstudenttemp;strcpy(temp.name,s1->name);strcpy(s1->name,s2->name);strcpy(s2->name,temp.name);temp.age=s1->age;s1->age=s2->age;s2->age=temp.age;temp.sex=s1->sex
4、;s1->sex=s2->sex;s2->sex=temp.sex;}指向結(jié)構(gòu)體的指針具體函數(shù)實(shí)現(xiàn)2,直接交換voidchange(structstudent*s1,structstudent*s2){structstudenttemp;temp=*s1;*s1=*s2;*s2=temp;}intmain(){intn,i,mini;floatx,y,mint,t;structstudentstudent1={"wangyan",23,0};structstudentstudent2={"zhangsan",24,1};printf("交換前的信息:");printf("
5、%s%d%d",student1.name,student1.age,student1.sex);printf("%s%d%d",student2.name,student2.age,student2.sex);printf("交換后的信息:");change(&student1,&student2);printf("%s%d%d",student1.name,student1.age,student1.sex);printf("%s%d%d",student2.name,student2.age,student2.sex);return0;}運(yùn)行結(jié)果:指
6、向結(jié)構(gòu)體的指針將一些有序的數(shù)據(jù)放在數(shù)組中時,當(dāng)發(fā)生數(shù)據(jù)增加和刪除時,數(shù)組需要大量的移動操作,代價(jià)很高。單項(xiàng)鏈表:一個節(jié)點(diǎn)通過指針連接著下一個節(jié)點(diǎn)。節(jié)點(diǎn)的插入和刪除只需要修改若干指針就可以,代價(jià)比數(shù)組小得多。如:定義結(jié)構(gòu)體用于建立一個學(xué)生數(shù)據(jù)的鏈表,鏈表中的學(xué)生按照年齡順序存放。structStudent{charname[20];intage;structStudent*next;//Student類型的指針,指向下一個學(xué)生};指向結(jié)構(gòu)體的指針Name:JomAge:20Next:Name:LilyAge:14Next:Name:RoseAge:10Next:Name:Jak
7、eAge:13Next:建立鏈表的結(jié)構(gòu):指向結(jié)構(gòu)體的指針建立鏈表所需的東西:定義鏈表中每個節(jié)點(diǎn)所屬的結(jié)構(gòu)體類型,此結(jié)構(gòu)體類型中應(yīng)當(dāng)有指向下一節(jié)點(diǎn)的指針structStudent{charname[20];intage;structStudent*next;};記錄鏈表頭節(jié)點(diǎn)的指針structStudent*head;指向結(jié)構(gòu)體的指針建立鏈表(向鏈表中添加節(jié)點(diǎn))的函數(shù):voidaddStudent(structStudent*head,structStudents){s.next=null;//先將s的n