1、结构体类型的定义和变量的定义
用途:把不同类型的数据组合成一个整体,类似Java中的类,但不同的是,C语言的构造体中木有函数(即Java中的方法)———自定义数据类型
1.1 定义一个结构体类型的一般形式
struct [结构体名]//struct是关键字, 不能省略;结构体名为合法标识符。 { 类型标识符 成员名;//成员类型可以是基本型或构造型 类型标识符 成员名; ············ };//注意不要忘记这里的 ;1.2 定义结构体类型变量的3种方法
1.2.1 先定义结构体类型,再定义变量名
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2;1.2.2 定义结构体类型同时定义结构体类型变量:
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;1.2.3 直接定义结构体类型变量:
struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;说明:
结构体类型与结构体变量概念不同
类型:不分配内存; 变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
结构体可嵌套
结构体成员名与程序中变量名可相同,不会混淆
例:
例 struct date { int month; int day; int year; }; struct student { int num; char name[20]; struct date birthday; }stu;1.3 结构体变量的初始化
一般格式
结构体类型 结构体变量名={初始值表 };
方法一:
struct student { char name[10]; int age; float score[5],ave; }stu={“zhangsan”,20,78,92,83,75,69};方法二:
例2: struct student { char name[10]; int age; float score[5],ave; }; struct student stu={“zhangsan”,20,78,92,83,75,69};1.4 结构体变量的引用
1.4.1对结构体类型数据的整体引用
赋值运算
ANSI C允许两个相同结构的结构体变量直接赋值
例:
struct student li,zhang={"zhangsan",20,78,92,83,75,69}; li=zhang; //将zhang对象拷贝一份赋值给li /* 但li={ “li si”,19,76,56,90,69,80};是非法的 */1.4.2 求结构体类型数据的字节数
sizeof(变量名或类型名);1.4.3 结构体类型数据成员的引用
引用规则:结构体变量出同类型赋值外,不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员变量
stu.name = "dashan";1.4.4 嵌套结构体中成员的引用
结构体嵌套时,逐级引用
struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2; //给出生日期的年份赋值 stu1.birthday.year = 1999;2、结构体数组
2.1 结构体数组的定义及初始化
2.1.1结构体数组的定义,与定义结构体类型变量很类似,也有三种形式
形式一:
struct student { int num; char name[20]; char sex; int age; }; struct student stu[2];形式二:
struct student { int num; char name[20]; char sex; int age; }stu[2];形式三:
struct { int num; char name[20]; char sex; int age; }stu[2];2.1.2 结构体数组的引用
结构体数组元素的引用
struct student { int num; char name[20]; char sex; int age; }str[3]={{10,”zhang san”,’,M’,20}}; str[1]=str[0];结构体数组元素成员的引用
引用方式: 结构体数组名.成员名
struct student { int num; char name[20]; char sex; int age; }str[3]; stu[1].age++; strcpy(stu[0].name,”ZhaoDa”);3、结构体和指针
3.1 结构体指针变量的定义
定义形式:struct 结构体名 *结构体指针名;
struct student *p; //此时指针变量*p中存放的是--结构体变量在内存的起始地址 //例: struct student { int num; char name[20]; char sex; int age; }stu; struct student *p=&stu;3.2 结构体指针变量的引用
使用结构体指针变量引用成员形式
(*结构体指针变量名).成员名 结构体指针变量名->成员名 结构体变量名.成员名
例:
int n; int *p = &n; *p = 10; <=> n = 10;struct student { long int num; char name[20]; char sex; float score; }stu1; struct student *p = &stu1; stu1.num=101; <=> (*p).num=101; <=> p->num=101;