文章目录
10.1.1 结构体的定义
1.结构体定义的一般形式。
struct 结构体名(结构体类型名)
{
数据类型 成员名 1;
数据类型 成员名 2;
数据类型 成员名 3;
};
struct Student(结构体类型名)
{
int num;
char name[20];
char sex[3];
//char name[20],sex[3];也可以这么写。
int age;
float score;
};
说明:
结构体变量才分配地址,结构体定义并不分配内存空间。
2.结构体可以嵌套定义,即成员可以属于另外一个结构体。
struct Date
{
int year;
int month;
int day;
};
struct Student
{
int num;
char name[20];
char sex[3];
int age;
float score;
struct Date birthday;
//结构体Date必须在结构体Student之前定义。
};
3.全局变量。局部变量。
在一个函数内定义是局部的。
在一个函数外定义是全局的。
4.结构体定义的第二种形式。宏定义形式。
#define 宏名 结构体名
宏名
{
数据类型 成员名 1;
数据类型 成员名 2;
数据类型 成员名 3;
};
#define STU struct Student
STU
{
int num;
};
10.1.2结构体变量的定义。分配存储空间。
结构体变量有3种方法。
(1)间接定义——先定义结构体,再定义结构体变量。
特点:定义类型后可以随时定义变量,比较灵活。
struct Student(结构体类型名) stu1, stu2;
#define STU struct Student
STU
{
int num;
}
STU stu1,stu2;
(2)定义结构体的同时定义结构体变量。
struct 结构体名
{
数据类型 成员名 1;
数据类型 成员名 2;
数据类型 成员名 3;
}变量名1,变量名2,变量名3;
struct Student
{
int num;
char name[20];
char sex[3];
int age;
float score;
}stu1,stu2;
(3)直接定义结构体变量而不指定结构体名。不出现结构体名,因此不能用结构体去定义其他变量。
struct
{...
}变量名1,变量名2,变量名3;
结构体变量的存储。
一个结构体变量所占用内存空间的字节数可以用长度运算符sizeof算出。
struct Student
{
int num;
char name[20];
char sex[3];
int age;
float score;
char school[20];
char add[30];
}stu1;
sizeof(stu1)=4+20+3+4+4+20+30=85B
10.1.3结构体变量的使用
1.结构体变量的引用
(1)成员不属于另一个结构体,只是普通变量。
"."是成员运算符,在所有运算符中优先级最高。
(2)成员本身又是一个结构体,要用若干个“.”,必须找到最低级的成员才能使用。
比如:stu1.birthday.month
2.结构体变量的初始化
struct Student
{
int num;
char name[20];
char sex[3];
int age;
float score;
char school[20];
char add[30];
}stu1;
struct Student stu1 = {181110065,"泥煤",... };
3.结构体变量的赋值
(1)对到那个成员进行赋值
stu1.num = 181110065;
char name[20];
strcpy(stu1.name,“泥煤”);
4.结构体变量的输入与输出
scanf("%d %s",&stu1.num,stu1.name);
字符数组,首地址即名字
10.1.4
1.结构体数组的定义、引用和初始化
(1)结构体数组的定义。
struct 结构体名 结构体数组名[元素个数];
struct Student
{
int num;
char name[20];
float score[3];
};
struct Student stu[3];
定义了一个结构体数组stu,共有3个元素。每个数组元素都具有struct Student 的结构形式。
(2)结构体数组的引用。
stu[0].num
(3)结构体数组的初始化。
struct Score stu[3] = {{},{}};
注意:结构体数组要在定义时就直接初始化。