资源描述:
《c20-指向结构体类型数据的指针.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、指向结构体变量的指针 变量的指针就是变量的地址一个结构体变量的指针就是该变量所占据内存空间的起始地址。可以把一个结构体变量的起始地址赋予一个指针变量,使该指针变量指向该结构体变量。一个指针变量当用来指向一个结构体变量时,称之为结构体指针变量.通过结构体指针变量即可访问相应的结构体变量.假如已经定义了如下结构体类型:structstu { intnum; charname[20]; charsex; floatscore; };如要声明一个指向structstu类型变量的指针变
2、量pstu,可写为:structstu*pstu;当然也可在定义结构体类型structstu的同时定义pstu。如果boy1是structstu类型的变量,那么可以把boy1的地址赋给pstupstu=&boy1; 通过结构体指针变量,能更方便地访问结构体变量的各个成员。其访问的一般形式为: (*结构体指针变量).成员名或为: 结构体指针变量-〉成员名例如:(*pstu)。num //boy1.num或者:pstu->num应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高
3、于“*”。如去掉括号写作*pstu。num则等效于*(pstu。num),这样,意义就完全不对了。下面通过例子来说明结构体指针变量的应用.例题1structstu { intnum;char name[20]; charsex; floatscore;}boy1={102,"Zhang ping”,’M',78。5},*pstu;main(){ pstu=&boy1; printf(”Number=%dName=%s”,boy1.num,boy1.name); printf("Sex
4、=%cnScore=%f\nn”,boy1。sex,boy1.score); printf(”Number=%d\nName=%s\n",(*pstu)。num,(*pstu).name); printf("Sex=%cnScore=%f\n",(*pstu)。sex,(*pstu)。score); printf("Number=%dName=%s",pstu—>num,pstu—>name); printf("Sex=%c\nScore=%f",pstu—〉sex,
5、pstu-〉score);} 本例程序定义了一个结构体类型structstu,定义了structstu类型变量boy1并作了初始化赋值,还定义了一个指向structstu类型结构体变量的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后用三种形式输出boy1的各个成员值。从运行结果可以看出:结构体变量。成员名(*结构体指针变量)。成员名结构体指针变量—〉成员名这三种表示结构体变量成员的形式是完全等价的.指向结构体数组的指针如果结构体指针变量的值是某个结
6、构体数组的首地址,这时结构体指针变量指向该结构体数组.如果结构体指针变量的值是某结构体数组元素的地址,这时结构体指针变量指向该元素。例题2指向结构体数组的指针的应用structstu{ intnum; char name[20]; charsex;float score;}boy[5]={ {101,”Zhou ping",'M',45}, {102,"Zhangping",’M’,62.5}, {103,"Lioufang”,'F',92。5}, {104,"Chengling
7、",'F’,87}, {105,”Wangming",'M',58},};main(){ structstu*ps;printf("NotNametttSex\tScore\t");for(ps=boy;ps〈boy+5;ps++)printf(”%dt%s\tt%ct%f\t",ps->num,ps->name,ps->sex,ps-〉score);}在程序中,定义了structstu类型的外部数组boy并作了初始化赋值。在main函数内定义ps为指向structstu类型
8、变量的指针变量.在循环语句for的表达式1中,ps被赋予boy的首地址,循环5次,输出boy数组中各元素的各成员值.应该注意的是,一个结构体指针变量虽然可以用来访问结构体变量或结构体数组元素的成员,但是,不能使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。ps=&boy[1]。sex; 错误赋值类型定义符typedef除了可以直接使用c提供的标准类型名和自己声明的结构体,共用体,指针,枚举类型外.还可以用typedef声明新的类