- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
num
25B
name sex age num
name sex age
stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,„M‟,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,„M‟,19, int age; }stu[ ]={{……},{……},{……}}; 101,“Li Gang”,„M‟,19}, strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„域
结构体类型定义描述结构 的组织形式,不分配内存
§11.2 结构体变量的定义
先定义结构体类型,再定义结构体变量
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; 例 #define ……………. STUDENT struct student }; STUDENT struct student struct 结构体名 变量名表列;
直接定义结构体变量
一般形式:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列; 用无名结构体直接定义 变量只能一次
例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
形式二:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
一般形式:
例
{ int num; int num; char name[20]; char name[20]; char sex; char sex; int age; int age; float score; float score; char addr[30]; char addr[30]; }; }; STUDENT stu1,stu2; struct student stu1,stu2; {
成员类型可以是 基本型或构造型
num
2字节
…
name
20字节 1字节 2字节 4字节
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
sex age score
…..
指向结构体数组的指针
例 指向结构体数组的指针 struct student p num { int num; name char name[20]; sex char sex; age p+1 int age; }stu[3]={{10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}}; main() { struct student *p; for(p=stu;p<stu+3;p++) printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age); }
§11.5 结构体数组
结构体数组的定义
三种形式:
形式三: 形式二: 形式一: struct student struct student { int num; char name[20]; char sex; int age; }stu[2]; }; struct student stu[2];
§11.4 结构体变量的初始化
形式一:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
形式三:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,„M‟,19, “200 Beijing Road”};
§11.3 结构体变量的引用
引用规则
结构体变量不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员名
例 struct 成员(分量)运算符 student 可以将一个结构体变量赋值给另一个结构体变量 例 struct student { stu1.num=10; int num; 优先级: 结构体嵌套时逐级引用 1 { int num; 例 struct student 结合性:从左向右 { char name[20]; int num; 例 struct name[20]; char sex; char student char name[20]; stu1.score=85.5; 例 structchar num; student { int sex; int char sex; age; printf(“%d,%s,%c,%d,%f,%s\n”,stu1); () if(stu1==stu2) { int age; num; stu1.birthday.month=12; char name[20]; float score; int …….. () stu1.score+=stu2.score; char score; name[20]; int age; struct float date char addr[30]; stu1.age++; float score; char addr[30]; stu1={101,“Wan Lin”,„M‟,19,87.5,“DaLian”}; () sex; { int char month; }stu1,stu2; addr[30]; char birthday int age; int }stu1,stu2; day; num name float score; }stu1,stu2; month day year int year; stu2=stu1; ( ) char addr[30]; }birthday; }stu1,stu2; }stu1,stu2;
第十一章 结构体与共用体
§11.1 结构体
结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体------自定义数据类型 结构体类型定义 合法标识符
可省:无名结构体
struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };
struct是关键字, 不能省略
count 0
0 0
§11.6 结构体和指针
main() 指向结构体变量的指针 { struct student 定义形式:struct 结构体名 *结构体指针名; { 例 struct student *p; long int num; char name[20]; 使用结构体指针变量引用成员形式 struct student 存放结构体变量在内存的起始地址 char sex; p num { score; float int num; (*结构体指针名).成员名 结构体指针名->成员名 例 int n; struct student 结构体变量名.成员名 namestu1; char name[20]; }stu_1,*p; stu int *p=&n; struct student sex *p=&stu1; 例 p=&stu_1;char sex; 指向结构体的指针变量 *p=10; 指向运算符 stu1.num=101; age (*p).num=101 n=10 int age; stu_1.num=89101; }stu; 优先级: 1 strcpy(stu_,"Li Lin"); 结合方向:从左向右 struct student *p=&stu; p->sex='M'; p->score=89.5; printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,p->name,stu_1.sex,p->score); }