建设网站公司东莞,社交新零售,深圳市建设局网站张局,建设网站费用吗1、结构体
定义新的数据类型#xff1a;
数据类型#xff1a;char short int long float double 数组 指针 结构体
结构体#xff1a; 新的自己定义的数据类型 格式#xff1a; struct 名字{ 成员 1#xff1b; 成员 2#xff1b; 。 。 。 …1、结构体
定义新的数据类型
数据类型char short int long float double 数组 指针 结构体
结构体 新的自己定义的数据类型 格式 struct 名字{ 成员 1 成员 2 。 。 。 成员 n } 举例
struct Student{char name[32];int ID;float fraction;
}; 新的数据类型名 struct 名字
1.2定义方式
1.2.1先定义数据类型再用数据类型定义变量
第一步 定义数据类型
struct Stu
{char name[32];int ID;float score;
}; //已经定义好新的数据类型 叫 struct Stu 仅仅有数据类型 不定义变量 计算机不开辟空间 第二步 用自己定义的数据类型 定义变量 struct Stu per1 定义一个变量 变量名叫 per1 per1 的数据类型 struct Stu 类型 计算机给 per1 开 辟 sizeof(struct Stu)大小空间。
1.2.2 定义数据类型 同时用数据类型定义变量
struct Stu
{char name[32];int ID;float score;
}per1; 定义一个变量 变量名叫 per1 per1 的数据类型 struct Stu 类型 计算机给 per1 开辟 sizeof(struct Stu)大小空间。
1.2.3 无名结构体 只能在定义数据类型的同时定义变量
struct
{
char name[32];
int ID;
float score;
}per1;
1.3 结构体取成员
普通变量格式 变量名.成员
举例struct Stu{char name[32];int ID;float score;};struct Stu per1 取成员 per1.name char [32] %s per1.ID int %d per1.score float %f 指针变量取成员
格式 指针变量名-成员
举例struct Stu{char name[32];int ID;float score;};struct Stu per1 //结构体变量名不是地址struct Stu *p per1p-name char [32] %sp-ID int %dp-score float %f
1.4结构体的初始化 1-- 完全初始化 -- 依次赋值 2-- 部分初始化 -- 依次赋值 未赋值的系统给 0 3-- 只定义变量 不赋值 遵循全局变量和局部变量自身的原则 4-- 取成员初始化 5-- 从键盘输入 1.5求结构体大小
方式 1 计算机运算 sizeof();//括号中写变量名/结构体数据类型 方式 2 自己运算 第一步 确定对齐方式-以下三个中的较小者 1》 看系统 64 位 8 字节 2》 看结构体中最大成员的大小 数组 看元素 3》 #pragma pack(2/4/8) 括号中写几就是几 第二步 结构体中除第一个成员外 其他成员距离首地址的偏移量 必须是对齐方式 或者自身大小中较小者的整数倍 第三步 结构体的整体大小 必须是对齐方式的整数倍
举例
struct Stu
{int id;char ch;long num;
}
//第一步先确定对齐方式现在使用的计算机基本上都是64位处理系统对应的也就是8字节。
然后看结构体中最大成员的大小数组看元素其中结构体中最大的为long类型8字节。和系统比较取最小也就是说对齐方式为8
第二步看结构体中除第一个成员外其他成员距离首地址的偏移量必须是对齐方式或者自身大小中较小者的整数倍。
ch举例首地址的偏移量是4字节满足是自身大小的1的整数倍不需要填充。
num举例首地址的偏移量是5字节需要对齐方式8或者自身大小的整数倍那么ch后面要添加三个位
第三步:结构体整体的大小必须是对齐方式的整数倍目前是16满足2、共用体
关键字union
定义所有的成员公用同一块空间
格式 union 名字{ 成员 1 成员 2 ... 成员 n } 使用方式 和结构体基本一致。
大小 第一步 确定对齐方式-以下三个中的较小者 1》 看系统 64 位 8 字节 2》 看共用体中最大成员的大小 数组 看数据类型 第二步 最大成员 满足对齐方式的整数倍
union Tag
{int a;char buf[5];
};
第一步操作系统为8位共用体内最大为int 4位。
确定对齐方式为4
第二步int 4char 15必须是对齐方式的整数倍。所以后面要补位加三整体大小为8
应用 测试计算机的大小端 大端模式是指数据的高字节保存在内存的低地址中 小端模式是指数据的高字节保存在内存的高地址中
代码测试
#includestdio.h
union Tag
{unsigned int a;unsigned char buf[4];};
int main()
{/*union Tag text;text.a1;if(text.buf[0]1){printf(小端\n);}else if(text.buf[3]1){printf(大端\n); }*/unsigned int a1;unsigned char *p(unsigned char*)a;if(*p1){printf(小端\n);}else if(*(p3)1){printf(大端\n); }return 0;
}3、枚举
const int num1 100 定义 整型常量的集合 关键字 enum 一般使用 enum{a,b,c,d,e,f,g} a 整型常量 是 0 b 整型常量 是 1 c 整型常量 是 2 。 。 。 。 g 是 6
特殊用法 enum{a,b,c,d100,e,f,g} a 整型常量 是 0 b 整型常量 是 1 c 整型常量 是 2 d 整型常量 是 100 e 整型常量 是 101 f 整型常量 是 102 g 整型常量 是 103 枚举大小 和里面具体的个数无关 固定 4 字节
typedef 给数据类型起一个新的名字 格式 typedef 原来的数据类型 新的名字; typedef int A; A 就是 int 的别名 A a; //int a; typedef struct Stu{ ... }STU; STU 就是 struct Stu 的别名 STU per; // struct Stu per; typedef struct{ ... }STU; STU 就是结构体数据类型 STU per //用结构体定义变量叫 per