1、LOGOLOGO掌握结构体指针变量的定义及引用Teacher teaching designCONTENTS 目 录结构体指针的定义结构体指针的使用结构体数组的指针 结构体指针变量的定义PART 01struct stu int num;char*name;char sex;float score;stud;struct stu*pstu;举例感知struct 结构名 *结构指针变量名说明:要定义结构体指针变量,首先定义好结构体类型。结构指针变量说明的一般形式:结构指针变量的定义 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。(1)结构
2、指针变量也必须要先赋值后才能使用。注意添加标题内容(2)赋值是把结构变量的首地址赋予该指针变量,不能把结构体名赋予该指针变量。结构指针变量的定义(3)结构体名和结构变量是两个不同的概念,不能混淆。结构体名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。结构体指针变量的使用PART 02=&;赋值形式:例如:pstu=&stud;结构体指针变量的赋值(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就是从pstu结构体变量的成员num保存的
3、地址中获取数据,其意义完全不同。例如2(*pstu).num或者:pstu-num注意3(*结构指针变量).成员名或为:结构指针变量-成员名引用的一般形式为:1结构体指针变量的使用struct stu int num;char*name;char sex;float score;boy1=102,Zhangping,M,78.5,*pstu;main()pstu=&boy1;printf(Number=%dnName=%sn,boy1.num,boy1.name);printf(Sex=%cnScore=%fnn,boy1.sex,boy1.score);printf(Number=%dnNa
4、me=%sn,(*pstu).num,(*pstu).name);printf(Sex=%cnScore=%fnn,(*pstu).sex,(*pstu).score);printf(Number=%dnName=%sn,pstu-num,pstu-name);printf(Sex=%cnScore=%fnn,pstu-sex,pstu-score);(1)结构变量.成员名(2)(*结构指针变量).成员名(3)结构指针变量-成员名这三种用于表示结构成员的形式是完全等效的。从运行结果可以看出:结构体指针使用举例结构体数组的指针PART 03设ps为指向结构体数组的指针变量,则ps也指向该结构体数
5、组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。感知举例指向结构体的指针变量是以结构体成员所占的字节数为基本的移动单位。知识升华指针变量可以指向一个结构体数组,这时结构指针变量的值是整个结构体数组的首地址。指向结构体数组结构体指针变量也可指向结构体数组的一个元素,这时结构指针变量的值是该结构体数组元素的首地址。指向结构体数组某个元素结构体数组的指针struct stu int num;char*name;char sex;float score;boy5=101,Zhou ping,M,45,102,Zhang ping,M,62.5,103,Liou fang,F,92.5,10
6、4,Cheng ling,F,87,105,Wang ming,M,58,;main()struct stu*ps;printf(NotNametttSextScoretn);for(ps=boy;psnum,ps-name,ps-sex,ps-score);用指针变量输出结构数组元素值。结构体数组指针应用举例在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。在main函数内定义ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。说明一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能使它指向一个成员。也就是说不允许取一个成员的地址来赋予它。注意赋值ps=&boy1.sex;是错误的。而只能是:ps=boy;(赋予数组首地址)或者是:ps=&boy0;(赋予0号元素首地址)举例说明程序解读