资源描述:
《结构体的嵌套问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、结构体嵌套的问题作者:likefreebird时间:2010-05-2412:00:00指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量。7.3.1指向结构体类型变量的使用首先让我们定义结构体:structstu{charname[20];longnumber;floatscore[4];};再定义指向结构体类型变量的指针变量:structstu*p1,*p2;定义指针变量p1>p2,分别指向结构体类型变量。引用形式为:指针变量一>成员;[例7・2]对指向结构体类型变量的正确使
2、用。输入一个结构体类型变量的成员,并输出。include广使用maIIoc()需要*/structdata/★定义结构体*/{intday,month,year;};structstu广定义结构体*/{charname[20];longnum;structdatabirthday;/嵌*套的结构体类型成员};main()广定义main()函数*/student=malloc(sizeof(structstu));为/指*针变量分配安全的地址*7printff'lnputname,number,year,month,day:
3、f,);scanf(”%s",student・>name);输广入学生姓名、学号、出生年MH*/scanf(”%ld",&student・>num);scanf(n%d%d%d",&student->birthday.year,&student->birthday.month,&student・>birthday.day);printf(nOutputname,number,year,month,day,f);广打印输出各成员项的值*/printf("%20s%10ld%10d//%d//%d",student->name,student->
4、num,student・>birthday.year,student・>birthday.month,student->birthday.day);}程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc()来为指针分配安全的地址。函数sizeof()返冋值是计算给定数据类型所占内存的字节数。指针所指各成员形式为:student->namestudent・>numstudent・>birthday.yearstudent・>birthday.monthstudent・>birthday.day运行程序:Inputnam
5、e(number.yearzmonth.day:WnnRian3419Q752(3wangjian341987//5//237.3.2指向结构体类型数组的指针的使用定义一个结构体类型数组,其数组名是数组的首地址,这一点前血的课程介绍得很清楚。定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在使用时要加以区分。[例7・3]在例7・2屮定义了结构体类型,根据此类型再定义结构体数组及指向结构体类型的指针。structdataintday,month,year;};structstu/*定义结构体{charname[20];longnum
6、;structdatabirthday;/嵌*套的结构体类型成员"7};structstustudent[4],*p淀广义结构体数组及指向结构体类型的指针*7作p=student,此时指针p就指向了结构体数组studentop是指向一-维结构体数组的指针,对数组元素的引用可采用三种方法。1)地址法student+i和p+i均表示数组第i个元素的地址,数组元素各成员的引用形式为:(student+i)->name>(student+i)->num和(p+i)・>name、(p+i)・>num等。student+i和p+i与&student[i]
7、意义相同。2)指针法若p指向数组的某一个元素,则p++就指向其后续元素。3)指针的数组表示法若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与student"]等同。对数组成员的引用描述为:p[i].name、p[i].num等。[例7・4]指向结构体数组的指针变量的使用。structdata/*定义结构体类型*7{intday.month,year;};charname[20];longnum;structdatabirthday;};main(){inti;structstu*p,studen
8、t[4]={fliying",1,1978,5,23},{,,wangping,,,2,1979,3,14},{,'libo",3,1980,5,6},{”xuya