一、结构体概述
我们学过的数据类型有:int ,float ,double ,char ,int a[10],float b[100]; 有时候我们需要把这些整合起来一起使用。
例如:001 张三 男 18 xx栋xx单元xx号
002 李四 男 18 xx栋xx单元xx号
结构体:结构体也是一种数据类型,被叫做结构体类型。结构体,说白了就是把多种不同类型的数据捏到一起,目的是 能够表达更丰富的信息,有点类似于很多高级语言中的“记录”;
结构体类型
定义的一般形式:
struct 结构体名
{
//成员列表(可以多个)
};
//千万
不要忘记加这个分号
;
二、定义结构体类型变量的方法
例如:定义一个整型变量 int a;
要定义一个结构体类型变量,我们把
结构体名 看成一个类型名 就可以了,定义结构体类型有
三种方法:
(1)
struct
结构体名 变量名列表
例如:
struct student s1,s2;
(2) 定义结构体的时候就定义结构体类型变量,变量位置位于
} 之后,
;之前,多个变量之间用
, 隔开。
struct 结构体名
{
//成员列表
}
变量名列表;
例如:
struct student //定义一个结构体类型
{
int num; //学号
char name[100]; //姓名
int sex; //性别:0 女 , 1 男
int age; //年龄
char address[100]; //地址
}
s1,s2;
(3) 直接定义结构类型变量,连结构体名都省略了
一般形式:
struct
{
成员列表;
}变量名列表;
说明:
A.使用结构体,我们一般要
先定义一个
结构体类型,
然后定义
某些变量为该类型的变量,这是分两步走的;
B.结构体内部
还可以嵌套结构体;
C.结构体内
成员名,可以与程序中的变量名相同,彼此之间互不影响。
三、结构体类型变量的引用
(1)
不能将
结构体变量作为
一个整体进行引用,比如s1,s2都是结构体变量,但不能拿过来直接用,只能对结构体变量中的
各个成员分别引用;引用的方式为:
结构体变量名
.
成员名 [这个
. 叫做结构成员运算符,该运算符优先级
非常高 ,与()平级,所以可以把 s1.num 看作是一个整体]
例如:s1.num=1001; //将1001赋值给s1变量中的成员num
(2) 如果成员本身
又属于一个结构体类型,则要用若干个成员运算符,一级一级的找到最低一级成员,只能对最低级成员进行赋值或者存取。
s1.birthday.month=12;
s1.birthday.day=30;
s1.birthday.year=2018;
(3) 成员变量,就当成普通变量,可以像普通变量一样进行各种运算
s2.age=s2.age; //赋值
int agesum=s2.age+s2.age; //求年龄和
s1.age++; //年龄自加1,因为
. 的优先级最高,所以s1.age是个整体。
//s1++; 这样是不可以的这样写的。也不可以这样写:s1.brithday++;
(4) 因为成员变量我们也是当成普通变量的,所以它们
也是有地址的。
int *p=&s1.num;
pritntf("%d\n",*p); //结果是:1001
四、结构体变量的初始化
定义结构体类型的时候赋值
struct student s3={1003,"王五",1,16,"3栋5楼",10,14,2001};
//定义结构体类型的时候赋值