1、结构体类型的定义和变量的定义
- 结构体是一种构造数据类型
(构造数据类型:数组类型、结构体类型(struct)、共用体类型(union))
用途:把不同类型的数据组合成一个整体,类似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;