结构体
1.概念
1.结构体:描述一个事物,问题的一系列数据的集合.
例:linux
struct person
{
char name[20];
int year;
int class;
int phone;
char addr;
};web
2.做用
1.内置类型没法描述须要表述的事物,问题时就会定义结构体
2.返回的参数不仅是一个而是一个集合时就会采用结构体svg
3.内存对齐问题
(如下问题都是在32位平台讨论)
产生内存对齐的问题的缘由
1.不是全部的硬件平台都只支持访问任意地址上的任意数据
2.内存对齐能够提升工做效率,对于没有对齐的数据,内存访问的时候可能会处理两次而对齐的数据能够只访问一次
内存对齐就是典型的以空间换时间的作法
内存对齐规则
1.第一个成员与结构体变量的偏移量为0的地址处
2.剩余的变量要对齐到某个(对齐数)的整数倍的位置上
对齐数为编译器默认的一个对齐数与该成员大小的较小值。
VS中默认的值为8
linux中默认的值为4
3.结构体总大小为最大对齐数(第一个成员变量没有对齐数)的整数倍
4.若是结构体中有成员变量的类型是结构体被,镶嵌的结构体对齐到本身的最大对齐数的整数倍处,结构体总大小为最大对齐数的整数倍(遵循第3条原则:这里的最大对齐数包括被嵌套结构体的对齐数)3d
例:
struct student
{
char a;
double c;
int b;
}
struct person
{
char p;
student s;
int q;
}
code
大小端
1.背景
在计算机系统中,存储是以字节为单位的,每一个地址单元都对应着一个字节,1byte=8bit;从语言中处理有1byte的char类型还有2byte的short,4byte的int等等
,char自己就只占1字节固然没有问题,可是int是4字节,这时就会产生4字节在寄存器中存放的位置的问题.xml
定义
大端:把数据的高位字节放在内存的低位地址处,把数据的低位字节放在内存的高位地址处
小端:把数据的低位字节放在低位地址处blog
判断大小端的方法
方法一:图片
void main()
{
int num=0x12345678;
char* p=(char*)& num;
//经过将int(4字节)强转换成char单字节p指向num的起始字节(低字节)
if(*p==0x78)
{
//低字节存放在低位置处
printf(“小端\n”);
}
else
{
printf(“大端\n”);
}
}
方法二
void main()
{
//原理:联合体union的存放顺序是全部成员都从低地址开始存放,并且全部成
//员共享存储空间
union A
{
int num;
char ch;
}
union A p;
p.num=0x12345678;
if(p.ch==0x78)
{
//低字节存放在低位置处
printf(“小端\n”);
}
else
{
printf(“大端\n”);
}
}内存