## 结构体
- 格式:
struct 结构体名字{
成员1; //例如:char name[100];
成员2;
…
};
- 起别名格式
typedef struct 结构体名字{
成员1;
成员2;
…
}别名; --> 有了别名后,结构体名字可以省略
- 简单说明:结构体就是自定义的数据类型,由很多的数据组成的一个整体,每一个数据都是结构体的成员
- 书写位置:函数里面-局部变量;函数外面-全局变量
- 结构体作为函数参数(函数中可以传递结构体)
1. 第一种情况:传递结构体中的数据值
2. 第二种情况:传递结构体的地址值
#include<stdio.h>
#include<string.h>
typedef struct message {
char phone[12];
char mail[100];
}mess;
//进行结构体嵌套
struct people
{
char name[100];
int age;
struct message msg;
//或写成 mess msg;
};
//进行取别名,其中student是可以省略的
typedef struct student
{
char name[100];
int age;
}stu;
void updatePeople(struct people * peo);
int main() {
struct people p1; //进行批量赋值
strcpy(p1.name,"张三");
p1.age = 18;
printf("姓名:%s\n年龄:%d\n\n",p1.name,p1.age);
struct people p2 = {"王五",20}; //直接一次性赋值
printf("姓名:%s\n年龄:%d\n\n", p2.name, p2.age);
struct people p3; //进行批量赋值
strcpy(p3.name,"赵六");
p3.age = 23;
strcpy(p3.msg.phone,"18045461766");
strcpy(p3.msg.phone, "zhaoliu@163.com");
printf("姓名:%s\n年龄:%d\n电话号码:%s\n邮箱号:%s\n\n", p3.name, p3.age,p3.msg.phone,p3.msg.mail);
struct people p4 = { "周八",21,{"15270741918","zhouba@qq.com"}}; //直接一次性赋值
printf("姓名:%s\n年龄:%d\n电话号码:%s\n邮箱号:%s\n\n", p4.name, p4.age, p4.msg.phone, p4.msg.mail);
struct people p[4] = {p1,p2,p3,p4}; //结构体数组
for (int i = 0; i < 4; i++)
{
struct people temp = p[i];
printf("姓名:%s---------年龄:%d\n", temp.name, temp.age);
}
//调用函数进行信息修改
updatePeople(&p2);
printf("王五修改后姓名:%s\n王五修改后年龄:%d\n\n", p2.name, p2.age);
return 0;
}
void updatePeople(struct people* peo) {
printf("请输入要修改王五的姓名为:");
scanf("%s",(*peo).name);
printf("请输入要修改王五的年龄为:");
scanf("%d", &(*peo).age);
printf("-->修改后姓名:%s\n-->修改后年龄:%d\n", (*peo).name, (*peo).age);
}
## 内存对齐
- 不管是结构体,还是普通变量都存在内存对齐
- 规则:
1. 只能放在自己类型的整数倍的内存地址上
- 举例:
2. int 存放的位置:内存地址一定能被4整除
3. long long 存放的位置:内存地址一定能被8整除
- 特殊说明:如果是结构体的内存对齐,那么结构体的总大小是最大类型的整数倍
- 切记:对齐的时候会补空白字节,但是不会改变原来字节的大小,eg:char补位后,本身还是一个字节
## 共同体
- 即,一种数据可能有多种类型
- 特点:
1. 又称共用体/联合体
2. 所有的变量都使用同一个内存空间
3. 所占的内存大小 = 最大成员的长度(也受内存对齐影响)
4. 每次只能给一个变脸进行赋值,因为第二支赋值时会覆盖原有的值
- 和结构体的区别:
- 结构体:各存各的,内存占用时各个变量的总和(受内存对齐影响)
- 共用体:存一起,多次会覆盖,内存占用是最大类型占用内存大小(也受内存对齐影响)