linux高级编程五结构体

来源:互联网 发布:php广告任务网源码 编辑:程序博客网 时间:2024/05/22 04:23
===================== 结构体 =================
1. 结构体是构造的一种数据类型,结构体当中可以通过定义不同数据类型的成员变量保存不同含义的信息


2.结构体的定义:
1.有名结构体的定义
struct 结构体名称
{
数据类型 成员变量1;
数据类型 成员变量2;
... //结构体当中没有规定成员个数的上限值
};


2.无名结构体的定义
struct
{
数据类型 成员变量1;
数据类型 成员变量2;
...
}变量名;


3.嵌套结构体定义
struct student
{
int num;
char name[10];
struct student *a;
};

struct student
{
int num;
struct
{
int a;
int b;
}c;
};


3.结构体的初始化:
2.1全部初始化
struct student
{
int num;
char name[10];
char sex;
}stu = {123,"wang",'m'};

struct student
{
int num;
char name[10];
char sex;
};
struct student stu = {123,"wang",'m'};


2.2局部初始化


struct student stu1 = {
.num = 12,
.name = "wang"
};


2.3typedef用法
将一个数据类型起一个别名


4.结构体的引用
1.结构体的直接引用==> '.'
stu.name;
stu.num;


2.结构体的间接引用==> '->'
必须通过指针访问
struct student *pstu;
struct student stu;
pstu = &stu;
pstu->num;
pstu->name;
pstu->sex;




====================== 内存对齐 ====================
1.字节:cpu能够一次性处理的最大单位 1个字 = 4个字节   

内存对齐有三种:
1.字节对齐
2.半字对齐    2个字节对齐     short
3.字对齐      4个字节对齐  


内存对齐规则:
1.成员存放的地址必须是自身基本类型长度的整数倍

2.结构体总大小等于成员中最大的基本数据类型的整数倍


16字节
struct 
{
char a;
int b;
}c;




======================== 共用体 ====================
1.一般形式
union body
{
int a;
char b;
long c;
char name[32];
};


union body e;


2.共用体的特点:
1.共用体的大小取决于成员变量当中所占字节空间最大的那一个




2.共用体当中保存的数据,是上次赋值的成员变量的值


3.union、struct的区别
struct类型中每个成员独自占用各自空间
union类型中每个成员共占内存空间




练习:数据存储的大端小端问题。
低内存地址存放低数据位称为小端
低内存地址存放高数据位称为大端


      有一个unsigned int整数,分别将其前两个字节和后两个字节相加,输出结果


uinon add
{
unsigned int a;
struct
{
unsigned short b;
unsigned short c;
}e;
};




从终端获得3名学生的数据(封装成一个函数)
name:num:score

然后在中断上打印3名学生的数据(封装成另外的一个函数)













struct student
{
int num;
char name[10];
char sex;
};


struct student a;
struct student b;


struct
{
int num;
char name[10];
char sex;
}a;
struct
{
int num;
char name[10];
char sex;
}b;























































0 0
原创粉丝点击