1、什么是结构体
由多个不同类型的数据构成一个整体
2、定义结构体步骤
(1)定义结构体类型
(2)根据结构体类型,定义结构体变量
例如:
#include <stdio.h>
int main()
{
struct Person
{ // 里面的3个变量,可以称为是结构体的成员或者属性
int age; // 年龄
double height; // 身高
char *name; // 姓名
};
// 2.根据结构体类型,定义结构体变量
struct Person p = {20, 1.55, "jack"};
p.age = 30;
p.name = "rose";
printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height);
/* 错误写法
struct Person p2;
p2 = {30, 1.67, "jake"};
*/
struct Person p2 = {.height = 1.78, .name="jim", .age=30};
//p2.age = 25;
return 0;
}
3、结构体内存分析
定义结构体类型并不会分配内存,当为结构体类型的变量赋值时才会分配内存
4、结构体内存细节
#include <stdio.h>
int main()
{
struct Student
{
int age;// 4个字节
char a;
//char *name; // 8个字节
};
struct Student stu;
//stu.age = 20;
//stu.name = "jack";
// 补齐算法(对齐算法)
// 结构体所占用的存储空间 必须是 最大成员字节数的倍数
int s = sizeof(stu);
printf("%d\n", s);
return 0;
}
4、结构体内存细节
#include <stdio.h>
int main()
{
// 1.定义结构体类型(并不会分配存储空间)
struct Date
{
int year;
int month;
int day;
};
// 2.定义结构体变量(真正分配存储空间)
struct Date d1 = {2011, 4, 10};
struct Date d2 = {2012, 8, 9};
// 会将d1所有成员的值对应地赋值给d2的所有成员
d2 = d1;
d2.year = 2010;
printf("%d - %d - %d\n", d1.year, d1.month, d1.day);
printf("%d - %d - %d\n", d2.year, d2.month, d2.day);
/*
printf("%p - %p - %p\n", &d1.year, &d1.month, &d1.day);
int s = sizeof(d1);
printf("%d\n", s);
*/
}
}
5、定义结构体的3种方式
(1) 先定义类型,再定义变量(分开定义)
(3) 定义类型的同时定义变量(省略了类型名称)
(1) 先定义类型,再定义变量(分开定义)
struct Student
{
int age;
};
struct Student stu;
(2) 定义类型的同时定义变量struct Student
{
int age;
} stu;
struct Student stu;
(3) 定义类型的同时定义变量(省略了类型名称)
struct
{
int age;
} stu;