结构体的使用以及结构体内存对齐
2017-11-25 22:08
344 查看
1.结构体声明
2.机构体变量定义及其赋值
3.内存对齐
首先得掌握结构体的对齐规则:
1.第一个成员在与结构体变量偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数与 该 成员大小的较小值。(VS中默认的值为8,Linux中 的默认值为4 )
3. 结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
例:
分析原图点这里
4.结构体传参
运行结果:
struct stu //结构体类型声明方法一 { char name[20]; char sex[5]; char phone_number[20]; struct stu *p; }stu1;
struct //结构体类型声明方法二(省略标签) { char name[20]; int age; char sex; }t2;
2.机构体变量定义及其赋值
#include<stdio.h> struct stu { char name[20]; char sex[5]; char phone_number[20]; struct stu *p; }stu1={ "朱大明","男","138****2356" }; //定义结构体变量stu1并赋值 (方法一) int main() { struct stu stu2 = { "朱大明","男","138****2356" };//定义结构体变量stu1并赋值(方法二) // t2 = {23,'男'}; //错误 t2.age = 23; //成员变量赋值 t2.sex = 'M'; //成员变量赋值 strcpy(t2.name, "朱小明"); //字符数组做成员变量不能直接赋值字符串,需要用strcpy()函数; return 0; }
3.内存对齐
首先得掌握结构体的对齐规则:
1.第一个成员在与结构体变量偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数与 该 成员大小的较小值。(VS中默认的值为8,Linux中 的默认值为4 )
3. 结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
例:
struct stu { char name[20]; char sex[5]; char phone_number[20]; struct stu *p; }
分析原图点这里
printf("%d\n", sizeof(struct stu)); //下图为运行结果
4.结构体传参
#include<stdio.h> void show(struct stu stu2) { printf("%s\n", stu2.name); } void show1(struct stu *p) { printf("%s\n", p->name); } int main() { struct stu stu2 = { "朱大明","男","138****2356" }; struct stu *p = &stu2; show(stu2); //传递结构体变量 show1(p); //传递指针 return 0; }
运行结果:
相关文章推荐
- 结构体(struct)的使用、内存分布以及字节对齐测试总结
- 结构体(struct)的使用、内存分布以及字节对齐测试总结
- 使用vs2010用fread读取结构体内存自动对齐
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- sizeof(结构体)和内存对齐以及位域
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- sizeof(结构体)和内存对齐以及位域
- sizeof(结构体)和内存对齐以及位域
- 内存对齐的原理,作用,例子以及一些规划(中英文说明,适用sizeof结构体)
- 结构体用法以及内存对齐知识
- 自定义类型(结构体、枚举、联合)以及内存对齐问题
- 内存对齐的原理,作用,例子以及一些规划(中英文说明,适用sizeof结构体)
- 结构体和联合体的大小,结构体内存对齐的原因、规则以及柔性数组
- 使用 __attribute__ ((packed))让结构体编译时内存不对齐
- C++学习之旅——结构体和联合体的区别,以及数据对齐方式影响内存大小
- 结构体内存对齐以及基本数据类型夸平台大小
- log4cplus内存泄漏起因之一 结构体字节对齐 log4cplus结构体使用的是8字节对齐
- 你必须知道的指针基础-6.内存的初始化及结构体的使用
- 结构体(声明、初始化、内存对齐、如何传参)
- 结构体与内存字节对齐