------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
结构体内存分析
结构体所占用的存储空间 必须是 最大成员字数的倍数 ----->补齐算法(对齐算法)
定义结构体变量的3种方式
1>先定义类型,再定义变量(分开定义)
2>定义类型的同时定义变量
3>定义类型的同时定义变量(省略了类型名称)
2.利用指针访问结构体的成员
1> (*p).成员名称
2> p->成员名称
二.枚举
一:结构体
结构体:由一系列具有相同类型或不同类型的数据构成的数据集合
数组:只能由多个相同类型的数据构成
结构体:可以由多个不同类型的数据构成
1>.定义结构体类型
struct Person
{
// 里面的3个变量,可以称为是结构体的成员或者属性
int age; // 年龄
double height; // 身高
char *name; // 姓名
};
2>.根据结构体类型,定义结构体变量
struct Person p = {32, 1.75, "Colin"};
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, "jack"};
结构体内存分析
结构体所占用的存储空间 必须是 最大成员字数的倍数 ----->补齐算法(对齐算法)
定义结构体变量的3种方式
1>先定义类型,再定义变量(分开定义)
struct Student
{
int age;
};
struct Student stu;
2>定义类型的同时定义变量
struct Student
{
int age;
} stu;
struct Student stu2;
3>定义类型的同时定义变量(省略了类型名称)
struct
{
int age;
} stu;
结构体数组 :
能存放3个结构体变量,每个结构体变量占16个字节
struct RankRecord records[3] =
{
{1, "jack", 5000},
{2, "jim", 500},
{3, "jake", 300}
};
//错误写法 records[0] = {4, "rose", 9000};
结构体与指针
1.指向结构体的指针的定义
struct Student *p;
2.利用指针访问结构体的成员
1> (*p).成员名称
2> p->成员名称
int main()
{
struct Student
{
int no;
int age;
};
// 结构体变量
struct Student stu = {1, 20};
// 指针变量p将来指向struct Student类型的数据
struct Student *p;
// 指针变量p指向了stu变量
p = &stu;
p->age = 30;
// 第一种方式
printf("age=%d, no=%d\n", stu.age, stu.no);
// 第二种方式
printf("age=%d, no=%d\n", (*p).age, (*p).no);
// 第三张方式
printf("age=%d, no=%d\n", p->age, p->no);
return 0;
}
结构体的嵌套
int main()
{
struct Date
{
int year;
int month;
int day;
};
// 类型
struct Student
{
int no; // 学号
struct Date birthday; // 生日
struct Date ruxueDate; // 入学日期
// 这种写法是错误的
// struct Student stu;
};
struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};
printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
return 0;
}
二.枚举
定义:将变量的值一一列出来,变量的值只限于列举出来的值的范围内
int main()
{
enum Sex{ Man, Woman, Unknow};
// 0男 1女 -1不详
// int sex = -1;
enum Sex s = Unknow;
// 1.定义枚举类型
enum Season
{
spring,
summer,
autumn,
winter
};
// 2.定义枚举类型
enum Season s1 = winter;
printf("%d\n", s1);
return 0;
}