C语言结构体与链表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013/7/25
C语言程序设计教程
第11章 结构体与链表
9
(1)不能将一个结构体变量作为一个整体进行输入和 输出,而只能对结构体变量中的各个成员分别进行输入 和输出。 struct date { int month; int day; int year; }day; scanf(“%d%d%d”,day); (错误) scanf(“%d%d%d”,&day.year,&day.month, &day.day);(正确) printf(“%d%d%d”, day); (错误) printf(“%d%d%d”,day.year, day.month,day.day); (正确)
12
2013/7/25
C语言程序设计教程
第11章 结构体与链表
13
ch
f
ch
ch
f
ch
事实上,所有数据类型在内存中都是从偶数地址开始存放的 且结构所占的实际空间一般是按照机器字长对齐的 不同的编译器、平台,对齐方式会有变化 结构体变量的成员的存储对齐规则是与机器相关的 具有特定数据类型的数据项大小也是与机器相关的 所以一个结构体在内存中的存储格式也是与机器相关的
2013/7/25
C语言程序设计教程
第11章 结构体与链表
6
2.在定义结构体类型的同时定义变量
形式: struct 结构体名 { 类型标识符1 成员名1; 类型标识符2 成员名2; …… 类型标识符n 成员名n; } 变量名表; 例如:
struct student
{ char name[20]; char sex; int age; float score;
} stu1,stu2;
2013/7/25
C语言程序设计教程
第11章 结构体与链表
7
3. 用匿名形式直接定义结构体类型变量
形式: struct { 类型标识符1 成员名1; 类型标识符2 成员名2; …… 类型标识符n 成员名n; } 变量名表; 例如:
struct
{ char name[20]; char sex; int age; float score;
} stu1,stu2;
2013/7/25
C语言程序设计教程
第11章 结构体与链表
8
11.2.2
结构体变量的使用
结构体是一种新的数据类型, 因此结构体变量也可 以象其它类型的变量一样赋值、运算, 不同的是结构 体变量以成员作为基本变量。 结构体成员的表示方式为: 结构体变量名.成员名 其中的圆点运算符称为成员运算符,它的运算级 别最高。 如果将"结构体变量名.成员名"看成一个整体,则 这个整体的数据类型与结构体中该成员的数据类型相 同, 这样就可象前面所讲的变量那样使用,但应遵循 以下规则:
stu[1]
stu[2] 103 DYC M 24 78.5 CS
26 88.0 ”CS” 103 ”DYC” ’M’ 24
stu[2]
78.5
”CS”
第11章 结构体与链表
19
11.3.3 结构体数组的使用
结构体数组成员的访问是以数组元素为结构体变 量的, 其形式为:结构体数组元素名.成员名 如:stu[2].age [例11.1] 候选人得票的统计。设有三个候选人,每次 输入一个得票的候选人的名字,要求最后输出各人得 票结果。 struct person { char name[20]; int count; }leader[3]={"Zhang",0,"Li",0,"Wang",0};
2013/7/25
C语言程序设计教程
第11章 结构体与链表
21
一个结构体变量的指针就是该变量所占据的内存 段的起始地址。可以定义一个指针变量,用来指向 一个结构体变量,此时该指针变量的值是结构体变 量的起始地址。 11.4.1 指向结构体变量的指针 1.指向一个结构体变量的指针定义形式: struct 结构体名 *指针变量名; 例如:struct student { long int num; char name[20]; char sex; float score; };
2013/7/25
C语言程序设计教程
第11章 结构体与链表
10
(2)如果成员本身又属一个结构体类型,则要用若干个 成员运算符(’.’),一级一级地找到最底的一级的成员 ,只能对最底级的成员进行赋值或存取运算. struct student struct date { { long num; int month; char name[20]; int day; char sex; int year; } int age; struct date birthday; 如:stu1.birthday.year=2004; char depart[10]; stu1.birthday.month=12; }stu1; (3)对结构体变量的成员可以像同类型普通变量一样 进行各种运算。
2013/7/25
C语言程序设计教程
第11章 结构体与链表
23
例11.2 比较结构体成员的几种引用方式 #include "string.h" main() { struct student { long int num; char name[20]; char sex; float score; }; struct student stu_1; struct student *p;
2013/7/25
C语言程序设计教程
第11章 结构体与链表
4
struct person
{ struct date { int month; int day; int year; };
float num; char name[20]; char sex; int age;
struct date birthday;
2013/7/25
11.4 结构体类型指针
C语言程序设计教程
第11章 结构体与链表
22
struct student *pstu, stu;
pstu=&stu;
/*不要认为结构体变量名代表起始地址*/
2.由指向结构体的指针变量引用结构体成员的形式为: (*指针变量名).成员名 或 指针变量名->成员名 ->为指向运算符 如:上面示例用指针变量引用其成员的方式为: (*pstu).num ,(*pstu).name (*pstu).sex ,(*pstu).score 可以等价表示为: pstu->num, pstu->name,pstu->sex, pstu->score
char address[10]; };
2013/7/25
C语言程序设计教程
第11章 结构体与链表
5
11.2 结构体类型变量
11.2.1 结构体类型变量的定义
1.先定义结构体类型,再定义结构体变量
例如: 形式: struct 结构体名 struct student { 类型标识符 1 成员名1; { char name[20]; 类型标识符2 成员名2; char sex; …… int age; 类型标识符n 成员名n; float score; }; }; struct 结构体名 变量名表; struct student stu1,stu2;
2013/7/25
C语言程序设计教程
第11章 结构体与链表
20
main() { int i,j; char leader_name[20]; for (i=1;i<=10;i++) { scanf("%s",leader_name); for (j=0;j<3;j++) if (strcmp(leader_name,leader[j].name)==0) leader[j].count++; } printf("\n"); for (i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); }
2013/7/25
C语言程序设计教程
第11章 结构体与链表
3
2、关于结构体类型的说明: ①“struct 结构体名”是一个类型名,它和int、 float等作用一样可以用来定义变量。 ②结构体名是结构体的标识符不是变量名,也不 是类型名。 ③构成结构体的每一个类型变量称为结构体成员, 它象数组的元素一样, 但数组中元素以下标来访问的, 而结构体是按结构体变量名来访问成员的。 ④结构体中的各成员既可以属于不同的类型,也 可以属于相同的类型,而数组中的元素是属于同一 类型的。 ⑤成员也可以是一个结构体类型,如:
2013/7/25
C语言程序设计教程
第11章 结构体与链表
24
p=&stu_1; stu_1.num=200601; strcpy(stu_1.name,"Li Ping"); stu_1.sex='M'; stu_1.score=811.5; printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n", stu_1.num,stu_1.name,stu_1.sex,stu_1.score); printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,(*p).name,(*p).sex,(*p).score); printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%f\n", p->num,p->name,p->sex,p->score);
C语言程序设计教程
第11章 结构体与链表
17
11.3.2
结构体数组的初始化
一般形式是在定义的数组后面加上 ={初值表列}; struct student { long num; char name[20]; char sex; int age; float score; char add[5]; }stu[3]={ {101,”WGJ”,’M’,28,88.5,”CS”}, {102,”DYH”,’F’,26,88.0,”CS”}, {103,”DYC”,’M’,24,78.5,”CS”} };
2013/7/25
C语言程序设计教程
Fra Baidu bibliotek
第11章 结构体与链表
11
11.2.3 结构体变量的初始化与存储
1. 结构体变量的初始化:在定义结构体变量的同时 给它赋以初值。 struct student { char name[20];
char sex;
int age;
float score; }stu1,stu2={“Wangwu”,’m’,20,88.5};
2013/7/25
C语言程序设计教程
第11章 结构体与链表
12
2.结构体所占内存的字节数
• struct 类型用内存字节数 = ?
• 是所有成员变量的内存总和吗?

用运算符sizeof获得结构体大小
sizeof(变量或表达式)
sizeof(类型)
printf("%d\n", sizeof(struct sample)); printf("%d\n", sizeof(SAMPLE));
C语言程序设计教程
2013/7/25
第11章 结构体与链表
14
3.结构体变量存储分配示意图
stu1
1000
name[20] 1020 sex 1024 age 1028 1032
2013/7/25
score
C语言程序设计教程
第11章 结构体与链表
15
11.3 结构体数组
11.3.1 结构体数组的定义与使用 结构体是一种新的数据类型, 同样可以有结构体数组。 1、结构体数组的定义 结构体数组就是具有相同结构体类型的变量集合。 struct 结构体名 { 类型标识符1 成员名1; 类型标识符2 成员名2; …… 类型标识符n 成员名n; }数组名[整型常量表达式];
第11章 结构体与链表
1
第十一章 结构体与链表
11.1 结构体类型的定义 11.2 结构体类型变量 11.3 结构体类型数组 11.4 结构体类型指针 11.5 结构体与函数 11.6 链表
C语言程序设计教程
2013/7/25
第11章 结构体与链表
2
11.1 结构体类型的定义
结构体是由C语言中的基本数据类型构成的、并 用一个标识符来命名的各种变量的组合,其中可以使 用不同的数据类型。 1. 结构体类型的定义 struct 结构体名 { 类型标识符1 成员名1; 类型标识符2 成员名2; …… 类型标识符n 成员名n; }; struct 结构体名 ——结构体类型名
2013/7/25
C语言程序设计教程
第11章 结构体与链表
16
假如要定义一个班级100个同学的学号、姓 名、性别、年龄, 可以定义成一个结构体数组。 如下所示: struct { long num; char name[20]; char sex; int age; }stu[100];
2013/7/25
2013/7/25
C语言程序设计教程
101 ”WGJ”
数组各元素在内存中连续存放
stu[0]
num name sex age score add stu[0] 101 WGJ M 28 88.5 stu[1] 102 DYH F 26 CS
’M’ 28 88.5
”CS”
102 ”DYH” ’F’
88.0 CS
相关文档
最新文档