struct 结构指针.ppt
结构体指针结构体指针struct student int num;char name20;char sex;int age;struct student stu;/*定义结构体变量定义结构体变量*/struct student*pstu;/*定义结构体指针定义结构体指针*/pstu=&stu;v怎样通过怎样通过stu访问访问stu的成员?的成员?stu.num=1;/*成员运算符成员运算符*/Stu.name=“mary”;v怎样通过怎样通过pstu访问访问stu的成员?的成员?(*pstu).num=1;pstu-name=“mary“;/*指向运算符指向运算符*/第二种更常用第二种更常用pstustunumnamesexage1练习题练习题struct student int num;char name20;char sex;struct date birthday;请定义一个指针变量,指向此结构体,利用指针变量,请定义一个指针变量,指向此结构体,利用指针变量,存储存储1位学生的信息,并输出这位学生的信息。位学生的信息,并输出这位学生的信息。2v#include myfile.hvstruct studentv int num;v char name20;vchar sex;v struct date birthday;v;3vvoid main()vvstruct student stu,*pstu;vint i;vpstu=&stu;vprintf(input num:);scanf(%d,&pstu-num);vprintf(ninput name:);scanf(%s,pstu-name);v getchar();printf(ninput sex:);scanf(%c,&pstu-sex);vvprintf(ninput year:);scanf(%d,&pstu-birthday.year);vprintf(ninput month:);scanf(%d,&pstu-birthday.month);vprintf(ninput day:);scanf(%d,&pstu-birthday.day);v 4v vprintf(No:%dn,pstu-num);vprintf(Name:%sn,pstu-name);vprintf(Sex:%cn,pstu-sex);vprintf(Year:%dn,pstu-birthday.year);vprintf(Month:%dn,pstu-birthday.month);vprintf(Day:%dn,pstu-birthday.day);v v5结构体数组的指针结构体数组的指针vstruct STUDENT stu4;vstruct STUDENT*pt;vpt=stu;v如何引用如何引用stui?使用使用pt+,使,使pt指向指向stuipt-studentID等价于等价于 stui.studentID2341stu0stu1stu2ptPt+stu36练习题struct student int num;char name20;char sex;struct date birthday;vstruct student stuN;利用结构体数组指针变量,存储利用结构体数组指针变量,存储N个学生的信息,并输出这个学生的信息,并输出这N个个学生的信息。学生的信息。7v#define N 2vstruct datevint year;vint month;vint day;v;vstruct studentv int num;v char name20;v char sex;v struct date birthday;v;8vvoid main()vvstruct student stuN,*pstu;vint i;vpstu=stu;9vfor(i=0;inum);vvprintf(ninput name:);scanf(%s,pstu-name);vgetchar();vprintf(ninput sex:);scanf(%c,&pstu-sex);vprintf(ninput year:);scanf(%d,&pstu-birthday.year);vprintf(ninput month:);v scanf(%d,&pstu-birthday.month);vvprintf(ninput day:);scanf(%d,&pstu-birthday.day);vv10vfor(i=0,pstu=stu;inum,pstu-name,pstu-sex,pstu-birthday.year,pstu-birthday.month,pstu-birthday.day);v11结构体与函数结构体与函数v向函数传递结构体的单个成员向函数传递结构体的单个成员单向值传递,单向值传递,函数内对结构内容的修改不影响原函数内对结构内容的修改不影响原结构结构v向函数传递结构体的完整结构?向函数传递结构体的完整结构?v向函数传递结构体的首地址?向函数传递结构体的首地址?12struct date int year;int month;int day;void func(struct date p)p.year=2000;p.month=5;p.day=22;main()struct date d;d.year=1999;d.month=4;d.day=23;printf(“%d,%d,%dn”,d.year,d.month,d.day);func(d);printf(“%d,%d,%dn”,d.year,d.month,d.day);1999,4,231999,4,23结构体与函数结构体与函数13struct date int year;int month;int day;void func(struct date*p)p-year=2000;p-month=5;p-day=22;main()struct date d;d.year=1999;d.month=4;d.day=23;printf(“%d,%d,%dn”,d.year,d.month,d.day);func(&d);printf(“%d,%d,%dn”,d.year,d.month,d.day);1999,4,23结构体与函数结构体与函数2000,5,2214struct date int year;int month;int day;struct date func(struct date p)p.year=2000;p.month=5;p.day=22;return d;main()struct date d;d.year=1999;d.month=4;d.day=23;printf(“%d,%d,%dn”,d.year,d.month,d.day);d=func(d);printf(“%d,%d,%dn”,d.year,d.month,d.day);1999,4,232000,5,22结构体与函数结构体与函数15结构体与函数结构体与函数v向函数传递结构体的单个成员向函数传递结构体的单个成员单向值传递,单向值传递,函数内对结构内容的修改不影响原函数内对结构内容的修改不影响原结构结构v向函数传递结构体的完整结构向函数传递结构体的完整结构单向值传递,单向值传递,函数内对结构内容的修改不影响原函数内对结构内容的修改不影响原结构,结构,开销大开销大v向函数传递结构体的首地址向函数传递结构体的首地址用结构体数组或者结构体指针做函数参数用结构体数组或者结构体指针做函数参数除提高效率外,还可以修改结构体指针所指向的除提高效率外,还可以修改结构体指针所指向的结构体的内容结构体的内容16