C语言程序设计第53讲 指向结构体的指针
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习目标 ⑴ 掌握指向结构体变量的指针的用法。 ⑵ 掌握指向结构体数组的指针的用法。
指向结构体的指针
若定义一个指针变量指向一个结构体变量,称之为结构体
指针变量。
一个结构体变量的指针就是系统为该变量分配的内存段的 起始地址。
C Programming Language
一、指向结构体变量的指针
定义一个指向结构体变量的指针的一般形式: struct 结构体名 *结构体指针变量名 若已经定义了一个struct student类型的结构体类型,如果 要说明一个指向student的指针变量p,可以写成: struct student *p; 利用结构体指针变量访问所指向结构体成员的一般形式为: (* 结构体指针变量).成员名 或 结构体指针变量->成员名
C Programming Language
. 1】结构体指针变量的应用。 【例
#include <stdio.h> #include "string.h" struct student { int num; char name[20]; char sex; 程序运行结果: float score; num:8001 }; name: zhang ping main() sex: m { score:78.50 struct student stu1,* p; num:8001 p=&stu1; name: zhang ping stu1.num=8001; sex: m strcpy(stu1.name,"zhang ping"); score:78.50 stu1.sex='m'; stu1.score=78.5; printf("\n num:%d\n name:%s\n sex:%c\n score:%6.2f\n", (*p).num,(*p).name,(*p).sex,(*p).score); printf("\n num:%d\n name:%s\n sex:%c\n score:%6.2f\n",p->num,p>name,p->sex,p->score); }
C Programming Language
二、指向结构体数组的指针
指针也可以指向一个结构体数组,该指针就是整个结构体 数组的起始地址。
如果指针指向结构体数组中的某个元素的话,则该指针变
量的值就是这个结构体数组元素的起始地址。
C Programming Language
.【例2】指向结构体数组的指针的应用。
#include <stdio.h> struct student { int num; char name[20]; char sex; float score; }stu[3]={{8001,"zhanglei",'m',89.5}, {8002,"liling",'f',90}, {8003,"wangpin",'m',77.8}}; main() { struct student * p; printf("No. Name Sex Score\n"); for(p=stu;p<stu+3;p++) printf("%4d %-10s %3c %8.2f\n", p->num, p->name, p->sex, p->score); }
注意
. 1.p=&stu1.num 这种写法是错误的,而p指针只能指向struct student类型的变量。 2.p=&student 写法是错误的, student 只是结构体名,系统 并不为它分配存储空间,无法取出它的地址。 3. 程序中 (*p) 两侧括号不可缺少。因为“ .”成员运算符的 优先级高于“ * ”,如果写成 *p.num 则等价于 *(p.num) , 意义就会发生转变。 4.“ ->”称为指向运算符,它和“.”成员运算符都是优先 级最高的运算符,p->num实际上就是(*p).num的简写方式。
程序运行结果: No. Name Sex Score 8001 zhanglei m 89.50 8002 liling f 90.00 8003 wangpin m 77.80
Leabharlann Baidu
注意
一个结构体指针变量可以用来访问结构体变量或结构 体数组元素的成员,但是,不能使它指向一个具体的成员。
下面的赋值是错误的。
p=&stu[1].num; 只能是: p=stu; 或者是: p=&stu[0]; /*赋予0号元素首地址*/
C Programming Language
/*赋予数组首地址*/
小结
(1)指向结构体变量的指针。
利用结构体指针变量访问所指向结构体成员的方法:
• (* 结构体指针变量).成员名
• 结构体指针变量->成员名 (2)指向结构体数组的指针。
指向结构体的指针
若定义一个指针变量指向一个结构体变量,称之为结构体
指针变量。
一个结构体变量的指针就是系统为该变量分配的内存段的 起始地址。
C Programming Language
一、指向结构体变量的指针
定义一个指向结构体变量的指针的一般形式: struct 结构体名 *结构体指针变量名 若已经定义了一个struct student类型的结构体类型,如果 要说明一个指向student的指针变量p,可以写成: struct student *p; 利用结构体指针变量访问所指向结构体成员的一般形式为: (* 结构体指针变量).成员名 或 结构体指针变量->成员名
C Programming Language
. 1】结构体指针变量的应用。 【例
#include <stdio.h> #include "string.h" struct student { int num; char name[20]; char sex; 程序运行结果: float score; num:8001 }; name: zhang ping main() sex: m { score:78.50 struct student stu1,* p; num:8001 p=&stu1; name: zhang ping stu1.num=8001; sex: m strcpy(stu1.name,"zhang ping"); score:78.50 stu1.sex='m'; stu1.score=78.5; printf("\n num:%d\n name:%s\n sex:%c\n score:%6.2f\n", (*p).num,(*p).name,(*p).sex,(*p).score); printf("\n num:%d\n name:%s\n sex:%c\n score:%6.2f\n",p->num,p>name,p->sex,p->score); }
C Programming Language
二、指向结构体数组的指针
指针也可以指向一个结构体数组,该指针就是整个结构体 数组的起始地址。
如果指针指向结构体数组中的某个元素的话,则该指针变
量的值就是这个结构体数组元素的起始地址。
C Programming Language
.【例2】指向结构体数组的指针的应用。
#include <stdio.h> struct student { int num; char name[20]; char sex; float score; }stu[3]={{8001,"zhanglei",'m',89.5}, {8002,"liling",'f',90}, {8003,"wangpin",'m',77.8}}; main() { struct student * p; printf("No. Name Sex Score\n"); for(p=stu;p<stu+3;p++) printf("%4d %-10s %3c %8.2f\n", p->num, p->name, p->sex, p->score); }
注意
. 1.p=&stu1.num 这种写法是错误的,而p指针只能指向struct student类型的变量。 2.p=&student 写法是错误的, student 只是结构体名,系统 并不为它分配存储空间,无法取出它的地址。 3. 程序中 (*p) 两侧括号不可缺少。因为“ .”成员运算符的 优先级高于“ * ”,如果写成 *p.num 则等价于 *(p.num) , 意义就会发生转变。 4.“ ->”称为指向运算符,它和“.”成员运算符都是优先 级最高的运算符,p->num实际上就是(*p).num的简写方式。
程序运行结果: No. Name Sex Score 8001 zhanglei m 89.50 8002 liling f 90.00 8003 wangpin m 77.80
Leabharlann Baidu
注意
一个结构体指针变量可以用来访问结构体变量或结构 体数组元素的成员,但是,不能使它指向一个具体的成员。
下面的赋值是错误的。
p=&stu[1].num; 只能是: p=stu; 或者是: p=&stu[0]; /*赋予0号元素首地址*/
C Programming Language
/*赋予数组首地址*/
小结
(1)指向结构体变量的指针。
利用结构体指针变量访问所指向结构体成员的方法:
• (* 结构体指针变量).成员名
• 结构体指针变量->成员名 (2)指向结构体数组的指针。