資源描述:
《《結(jié)構(gòu)體與指針》PPT課件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、復(fù)習(xí):(1)結(jié)構(gòu)體變量的定義與引用(2)結(jié)構(gòu)體數(shù)組新內(nèi)容:(1)指向結(jié)構(gòu)體變量的指針(2)指向結(jié)構(gòu)體數(shù)組的指針(3)結(jié)構(gòu)體指針作為函數(shù)參數(shù)(4)用指針處理鏈表第7講結(jié)構(gòu)體與指針1復(fù)習(xí):結(jié)構(gòu)體變量的定義與引用注意不要忘了分號成員列表結(jié)構(gòu)體類型定義形式:struct結(jié)構(gòu)體類型名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;::數(shù)據(jù)類型成員名n;};關(guān)鍵字用戶定義的標(biāo)識符22.定義結(jié)構(gòu)體類型同時定義變量structstudent{charname[10];intage;ints1,s2;}st1,st2;1.先定義結(jié)構(gòu)體類型,再定義變量structstudent{ch
2、arname[10];intage;ints1,s2;};structstudentst1,st2;復(fù)習(xí):結(jié)構(gòu)體變量的定義與引用結(jié)構(gòu)體變量的定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量占用的字節(jié)數(shù)可用sizeof運(yùn)算符算出printf(“%d”,sizeof(structstudent));printf(“%d”,sizeof(st1));3復(fù)習(xí):結(jié)構(gòu)體變量的定義與引用例:structdate{intyear;intmonth;intday;};structstud{charname[10];structdatebirthday;ints1,s2;
3、};結(jié)構(gòu)體類型可以嵌套定義或:structstud{charname[10];structdate{intyear;intmonth;intday;}birthday;ints1,s2;};4復(fù)習(xí):結(jié)構(gòu)體變量的定義與引用應(yīng)用typedef定義結(jié)構(gòu)體類型structstudent{charname[10];intage;ints1,s2;};structstudentst1,st2;typedefstructstudent{charname[10];intage;ints1,s2;}SD;SDst1,st2;優(yōu)點(diǎn):書寫簡單,使程序具有更好的移植性5復(fù)習(xí):結(jié)
4、構(gòu)體變量的定義與引用引用結(jié)構(gòu)體變量中的成員(點(diǎn)記法)格式:結(jié)構(gòu)體變量名.成員名structstudent{charname[10];intage;ints1,s2;}st1,st2;strcpy(st1.name,“Mary”);st1.age=21;scanf(“%d%d”,&st1.s1,&st1.s2);相同類型的結(jié)構(gòu)體變量可以進(jìn)行整體賦值只能對結(jié)構(gòu)體變量的成員進(jìn)行輸入和輸出st2=st1;611.6.1指向結(jié)構(gòu)體數(shù)據(jù)的指針定義指向結(jié)構(gòu)體變量的指針typedefstructstudent{charname[20];intage;ints1,s2;}
5、SD;SDx,stu,*p;p=&stu;成員的引用格式(1)結(jié)構(gòu)體變量名.成員名stu.name例:scanf(“%s”,x.name);scanf(“%d”,&x.age);x.s1=89;x.s2=78;gets(stu.name);(*p).age=21;scanf(“%d”,&p->s1);p->s2=90;(2)(*指針變量名).成員名(*p).age(3)指針變量名->成員名p->s17賦值語句p=&student;指針變量p指向結(jié)構(gòu)體變量student引用結(jié)構(gòu)體中的成員變量:(*p).成員名或p->成員名相當(dāng)于student.成員名pst
6、udent8說明:和成員運(yùn)算符一樣,“->”為指向運(yùn)算符,是運(yùn)算優(yōu)先級最高的運(yùn)算符。由于成員運(yùn)算符“.”的運(yùn)算優(yōu)先級高于運(yùn)算符“*”,因此(*p).成員名中()不能少。*p.成員名p=&student.score;不能用指向某個結(jié)構(gòu)體變量的指針指向該結(jié)構(gòu)體變量的某個成員。9對結(jié)構(gòu)體數(shù)組及其元素可以用指針來指向例如:structstruct_name{charname[10];intnum;floatscore;};/*定義結(jié)構(gòu)體類型標(biāo)識符*/structstruct_namestd[30],*p;11.6.1指向結(jié)構(gòu)體數(shù)組的指針10900390趙明879
7、002王建899001李紅結(jié)構(gòu)體數(shù)組stdstd[0]std[1]std[2]p賦值語句p=std;/*p指向一個結(jié)構(gòu)體數(shù)組std*//*指針變量p存放的是數(shù)組std的首地址*/引用:p->name;p->num;p->score;11趙明909003879002王建899001李紅結(jié)構(gòu)體數(shù)組stdstd[0]std[1]std[2]思考:賦值語句p=std+1;和p++;分別代表指針p指向哪里?p->name;p->num;p->score;代表的信息發(fā)生了什么變化?pp12注意:以下賦值語句都是錯誤的:p=&std[1].score;(不能指向數(shù)組元
8、素的成員變量)p=&std;(數(shù)組名本身就代表該數(shù)組的首地址,因此不能使用地址運(yùn)