结构体
将不同种类型的数据有序地组合在一起,构造出一个新的数据类型,这种形式称为结构体。
结构体是多种类型组合的数据类型。
结构体类型的定义
struct是关键字,
不能省略
struct
[结构体名]
{
类型标识符 成员名;
类型标识符 成员名;
…………….
};
合法标识符
可省:无名结构体
成员类型可以是
基本型或构造型
例 struct student
{
short
int num;
char name[20];
char sex;
short int age;
float score;
char addr[30];
};
例 struct student
{
short
int num;
char name[20];
char sex;
short int age;
float score;
char addr[30];
};
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;
例 struct student
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
– 直接定义结构体变量
一般形式:
struct
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}变量名表列;
例 struct
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
用无名结构体直接定义
变量只能一次
– 说明
• 结构体类型与结构体变量概念不同
– 类型:不分配内存; 变量:分配内存
– 类型:不能赋值、存取、运算; 变量:可以
• 结构体可嵌套
• 结构体成员名与程序中变量名可相同,不会混淆
例
struct student
{ int num;
char name[20];
struct date
{ int month;
int day;
int year;
}birthday;
}stu;
例
struct date
{ int month;
int day;
int year;
};
struct student
{ int num;
char name[20];
struct date birthday;
}stu;
– 说明
• 结构体类型与结构体变量概念不同
– 类型:不分配内存; 变量:分配内存
– 类型:不能赋值、存取、运算; 变量:可以
• 结构体可嵌套
• 结构体成员名与程序中变量名可相同,不会混淆
例
struct student
{ int num;
char name[20];
struct date
{ int month;
int day;
int year;
}birthday;
}stu;
例
struct date
{ int month;
int day;
int year;
};
struct student
{ int num;
char name[20];
struct date birthday;
}stu;
结构体变量的引用
引用规则
引用方式: 结构体变量名.成员名
• 可以将一个结构体变量赋值给另一个结构体变量
• 结构体嵌套时逐级引用
• stu1.num=10;
• stu1.score=85.5;
• if(stu1==stu2)
• stu1.score+=stu2.score;
•
Wan Lin”,‘M’,19,87.5,“DaLian
1、不能对结构体变量整体赋值或输出,只能分别对各个成员引用。
2、嵌套的结构体变量必须逐层引用。
3、结构体变量中的成员可以同一般变量一样进行运算。
结构体变量的初始化
形式一:
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
student
{
int num;
char name[20];
char sex;
int age;
char addr[30];
}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”};
关于结构类型变量的使用,说明以下几点:
1、同类型的结构体变量之间可以直接赋值。这种赋值等同于各个成员的依次赋值。
2、结构体变量不能直接进行输入输出,它的每一个成员能否直接进行输入输出,取决于其成员的类型,若是基本类型或是字符数组,则可以直接输入输出。
3、结构体变量可以作为函数的参数,函数也可以返回结构体的值。当函数的形参与实参为结构体类型的变量时,这种结合方式属于值调用方式,即属于值传递。