结构体的定义
通过前面的学习,我们可以用一个数据类型加变量表示一个属性,但是当表示多个属性时,一个基本数据类型就不能表示了,此时就可以用到结构体来将多个属性进行存储。
语法:
struct 结构体名称
{
成员变量1;
成员变量2;
成员变量3;
...
成员变量n;
};
示例:用结构体表示学生的名字、性别、年龄、电话。
struct student{
char name[32];
char sex;
int age;
char tel[12];
};
结构体变量的定义
可通过以下几种方式进行定义:
struct 结构体名称 变量名;
可通过将结构体和变量名进行联用,相当于定义一个数据类型 变量名
,跟我们定义一个属性时是一样的,因为我们说过结构体也是一种数据类型,并且还可以通过以下方式进行定义。struct 结构体名称 *变量名;
>>>通过指针进行定义。struct 结构体名称 变量名[长度];
>>>通过数组进行定义。
扩展:
除了上述的定于方法,结构体的定义还支持以下这个方式进行定义。语法:
struct {
成员变量1;
成员变量2;
...
成员变量3;
}结构体变量1,结构体变量2,结构体变量3;
示例:
struct {
int age;
}A,B,C;
// 这里的A,B,C是结构体变量
这种结构的定义并不是很常用,了解即可。
结构体中成员变量的初始化
- 第一种:通过位置进行初始化
struct student s = {
"lisi",
"男"
18,
"12345678910"
};
这种初始化方法在进行初始化时,他的初始化值类型必须和定义结构体变量的定义顺序一样。
- 第二种:通过变量名前面加句点符号进行初始化
struct student s = {
.name = "lisi",
.sex = "男",
.age = 18,
.tel = "12345678910";
};
结构体种成员变量的访问
-
通过句点符号进行访问,这里的结构体变量必须是普通变量或者数组。
s.age、s.sex、s.name、s.tel
-
通过->进行访问,这里的结构体变量时指针变量
struct student *p = &s1;
这里的s1是一个完成初始化的普通结构体,可通过以下方式进行操作:
1)下标法:p[i].成员变量
2)指针法:(*(p+1)).成员变量
3)指向操作符
结构体的重新定义
使用typedef
关键字对结构体进行重新定义,语法:
typedef struct student{
成员变量1;
成员变量2;
成员变量3;
...
成员变量n;
}新类型1,*新类型2;
这里可以通过 新类型1 变量名1
或者 新类型2 指针变量名
进行定义。