1、结构体
#include <stdio.h>
// 结构体
struct Student1
{
int id;
char name[20];
}s4 = {2, "小红"};
// 无名结构体
struct
{
int id;
char name[20];
}s2,s3;
int main()
{
// 定义变量
struct Student1 s1;
// 结构体变量初始化
struct Student1 s5 = {10, "小明"};
// 使用,变量用 "." 引用成员,指针用 "->" 引用成员
printf ("id = %d,name = %s\n", s5.id, s5.name);
struct Student1 *ps = &s4;
s4.id = 20;
printf ("id = %d,name = %s\n", ps->id, ps->name);
return 0;
}
2、内存对齐
#include <stdio.h>
// 结构体
struct Test
{
char c1;
int a;
char c2;
};
struct Test1
{
char c1;
char c2;
char c3;
int a;
};
struct Test2
{
char c1;
short s;
int a;
char c3;
struct Test t1;
int a[20];
};
// 1、结构体的成员的首地址要能被该成员的类型长度整除
// 2、结构体为成员分配空间原则:
// a、每次分配的时候按当前最大类型分配
// b、如果当前空间够用,则不再分配空间
// c、如果当前类型大于系统系数的时候,按系统系数标准进行分配空间,否则按最大类型分配空间
int main()
{
printf ("sizeof Test = %lu\n", sizeof(struct Test));
printf ("sizeof Test = %lu\n", sizeof(struct Test1));
printf ("sizeof Test = %lu\n", sizeof(struct Test2));
struct Test2 t1, t2;
t1 = t2;
return 0;
}
3、共用体
#include <stdio.h>
// 共用体:
// 所用成员共用一段内存,共用体大小是成员中占据最大的成员的大小
union Test
{
int a;
char c;
};
union Test1
{
int a[20];
char c;
};
int main1()
{
printf ("sizeof Test = %lu\n", sizeof(union Test));
printf ("sizeof Test = %lu\n", sizeof(union Test1));
union Test t;
t.a = 10;
t.c = 'A';
printf ("%d\n", t.a);
return 0;
}
// 小端返回1 大端返回0
int func()
{
union
{
unsigned int a;
unsigned char c;
}t;
t.a = 0x12345678;
return (t.c == 0x78);
}
int main()
{
if (func() == 1)
printf ("小端\n");
else
printf ("大端\n");
return 0;
}
4、枚举
#include <stdio.h>
// 枚举:定义常量,用逗号隔开
enum week{ Mon, Tues, Wed = 10, Thurs, Fri = 20, Sat, Sun };
int main()
{
printf ("%d\n", Mon);
printf ("%d\n", Tues);
printf ("%d\n", Wed);
printf ("%d\n", Thurs);
printf ("%d\n", Fri);
printf ("%d\n", Sat);
printf ("%d\n", Sun);
int cmd;
scanf ("%d", &cmd);
switch(cmd)
{
case Mon:
break;
case Tues:
break;
case Wed:
break;
case Thurs:
break;
}
return 0;
}