h第八章 结构和联合
时间:2026-01-19
时间:2026-01-19
C语言程序设计教程,笔记
第8章 结构和联合
8.1 结构(structure)
8.1.1 结构类型
由若干个成员(域)组成。
每个成员具有自身的名字和数据类型,
同一结构中的成员名不能相同。
例如, 一个学生的信息,它包括以下5项:
学号、姓名、性别、年龄、成绩 8.1.2 结构类型的定义
一般形式:
struct 结构名
{
类型1 成员名1;
类型2 成员名2;
…
类型n 成员名n;
};
说明:
(1) 结构定义描述了结构的组织形式,但在编译时并不分配存储空间。(类似于int,char一样的作用)
(2) 结构的成员可以是简单变量、数组、指针、结构等。
struct date /*struct32个关键字之一*/
{ int day; char month[4]; int year; };
struct stud
{ long num;
char name[20];
char sex;
struct date birthday; 嵌套结构stud的逻辑结构
char *addr;
}
;
(3) 结构定义可在函数内部,也可在函数外部。
(4) 定义结构类型时,注意不能遗漏最后的分号。(表示一个类型定义语句)
8.1.3 结构
一、结构变量 变量的声明
三种定义方法
1.在定义结构类型的同时声明变量。例如:
struct student
{ long num;
char name[20];
C语言程序设计教程,笔记
char sex;
int age;
float score; }s1,s2,s3;
2.直接声明结构类型变量
例如:
struct
{
long num;
char name[20];
char sex;
int age;
float score;
} s1,s2,s3;/*(这里不同于前一种方法之处在于struct后面不出现结构名,故不便于在源程序中的其他地方声明新的变量)*/
3.先定义结构类型再声明变量
例如:
struct student
{
long num;
char name[20];
char sex;
int age;
float score;
};
struct student s1,s2,s3;
注意:
(1) 先定义类型再声明变量。
(2) 存储空间分配是按照各成员项的定义顺序进行的。
(3) 每个结构变量存储空间的大小是各成员项所占空间之和。例如:
sizeof( s1 )的值为31;4+20+1+2+4
sizeof( struct student )的值为31;
sizeof( float )的值为4。(sizeof长得像函数但其实是一个单目运算符,运算量可以是简单变量名、数组名、结构变量名、数据类型名等)
(4) 结构变量中的成员可单独使用。
二、结构变量的初始化
struct student
{ long num;
char name[20];
char sex;
int age;
float score;
C语言程序设计教程,笔记
}s1,s2={80101,"Lilin",'M ,18};←对s2进行初始化,没有注出的部分默认为0
三、结构变量的引用
形式:
结构变量名.成员名
.叫做成员运算符,用于访问结构变量的成员,优先级为第一优先级
main( )
{ struct student
{ long num; char name[20]; char sex; int age; float score;
} s1,s2={80101,"Lilin",'M',18};
printf( "%ld\n %s\n %c\n ", s2.num,http://www.77cn.com.cn,s2.sex);
s1=s2; /*结构变量还可以赋值传值*/
printf( "%ld\n %s\n %c\n", s1.num,http://www.77cn.com.cn,s1.sex);
}
×
注意:
(1)不能将一个结构变量作为一个整体进行输入和输出。
例: scanf("%ld%s%c",&s1);
printf("%ld\n %s\n %c\n",s2);
只能对各个成员分别进行输入和输出,如:
s1.num=80101;
strcpy(http://www.77cn.com.cn,"Liling");
(2)结构变量可以进行整体赋值,但不能整体进行比较。
if(s1>s2) printf("%s",http://www.77cn.com.cn); × stu[0]
stu[1]
stu[2]
stu[3]
stu[4] name sex age score (3) 如果成员本身又属一个结构类型,则要逐级地找到最低的一级成员 8.2 结构数组
8.2.1 结构数组的声明 结构数组的逻辑结构
1.定义结构类型后声明结构数组。例如:
struct student
{
long num;
char name[20];
char sex;
int age;
float score;
};
struct student stu[5];
C语言程序设计教程,笔记
2.直接声明一个结构数组
例如:
struct student
{ long num;
char name[20];
char sex;
int age;
float score;
}stu[5];
或
struct
{ long num;
char name[20];
char sex;
int age;
float score;
}stu[5];
8.2.2 结构数组的初始化
格式:
struct 结构名 结构数组名[元素个数]={初始数据};
struct student stu[3]={{80101, "Lilin", 'M', 18},
{80102,"Wanglan",'F',19},
{80103,"Zhangjun",'F',20}};
8.2.3 结构数组元素的引用
形式:
结构数组名[下标].成员名
例如
printf(“%ld”, stu[0].num);
strcpy(stu[0].name,"Lilin");
8.3 结构指针
8.3.1 指向结构变量的指针
形式: struct 结构名 *结构指针名;
例: struct student *p;
再例: struct student
{ long num;
char name[20];
char sex;
int age;
C语言程序设计教程,笔记
float score;
} s1, *p=&s1;
或
结构指针名->成员名
设有
struct date
{ int day;
char month[4];
int year;
}birthday,*sp=&birthday;