结构体定义
(1)先定义类型,再定义变量
struct PER
{
char id[100];
char name[100];
char sex;
int age;
};
struct PER person;
(2)定义结构体类型名的同时定义变量名
struct PER
{
char id[100];
char name[100];
char sex;
int age;
}person;
(3)省略类型名,直接定义结构体变量名
注意:如果省略类型名定义结构体,结构体变量名只能定义这一次;
struct
{
char id[100];
char name[100];
char sex;
int age;
}person;
//只能在这里定义结构体变量 随后不能继续定义如 struct person1;struct person2等
(4)利用typedef定义结构体类型名,然后再定义结构体变量
typedef struct
{
char id[100];
char name[100];
char sex;
int age;
}PER;
//这里的PER就类似于 (1)(2)的struct PER
//之后可以直接定义 PER person; PER student等等
结构体的大小
结构体是以4字节对齐进行开辟空间,可以说是4字节一个“单位”
比如(4)的结构体
typedef struct
{
char id[100];
char name[100];
char sex;
int age;
}PER;
这里 char id[100]占100个字节;----可以认为25个“单位”
char name[100];占100个字节;
char sex;占1个字节-----不足4字节 前后的变量都是整“单位” 所以sex占一个“单位” 即4个字节
int age;占4个字节 一个“单位”
所以 PER person 开辟空间大小是208个字节
再者
struct STU
{
char phone[20];
char name[50];
char sex;
int age;
int score;
}student;
char phone[20];占20个字节;----可以认为5个“单位”
char name[50];占50个字节;----可以认为12个“单位”再加上2个字节
char sex; 占1个字节;----它可以再加上之前的2个字节占一个单位的大小(地址连续)
int age; 占4个字节;----可以认为1个“单位”
int score; 占4个字节;----可以认为1个“单位”
所以该结构体开辟大小为80字节
引用
(1)通过变量进行引用 .
格式:变量名.成员名
struct STU
{
char phone[20];
char name[50];
char sex;
int age;
int score;
}student;
//引用age student.age 其他变量一样
(2) 通过指针进行引用成员 ->
格式:指针变量名->成员名
struct STU
{
char phone[20];
char name[50];
char sex;
int age;
int score;
}student;
//定义指针 struct STU * p;
//引用age p->age; 即可 其他变量同理
初始化
(1)定义结构体的同时初始化
struct PER
{
char id[100];
char name[100];
char sex;
int age;
}person={"160413","张三",'n',18};
printf("%s",person.id);
printf("%s",person.name);
printf("%c",person.sex);
printf("%d",person.age);
(2)定义结构体变量的时候初始化
struct PER
{
char id[100];
char name[100];
char sex;
int age;
};
struct PER person={"160413","李必胜",'n',18};
printf("%s",person.id);
printf("%s",person.name);
printf("%c",person.sex);
printf("%d",person.age);