自定义类型:结构体的内存对齐和传参问题
来源:互联网 发布:个人免费域名注册 编辑:程序博客网 时间:2024/05/16 17:47
结构体基础知识:
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。可以分为结构体指针类型、结构体数组类型`
eg:
struct Stu
{
char name[20];
int age;
double height;
char sex;
}a[20],*P;
注意末尾分号不能丢。
结构体的成员可以是标量、数组、指针、甚至是其他结构体。
结构体变量的成员是通过点操作符(.)访问的,点操作符接受两个操作数。
eg:
Struct Stu
{
char name[20];
int age
};
Struct S s;
strcpy(s.name,"lisi");
s.age=20;//使用.age访问s的成员。
结构体内存对齐
1.第一个成员在与结构体变量偏移量为0的地址处;
2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数:编译器默认的对齐数与该成员大小的较小值
vs(8) ; li3nux(4)
3、结构体总大小为最大对齐数的整数倍(每个成员变量除了第一个成员都有一个对齐数)
4、如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的大小就是所有最大对齐数的整数倍。
结构体的内存对齐是拿空间来换取时间的做法。
eg
:`1)struct S1 { char c1;//1 int i;//3+4->8 char c2;//1->9 };//12 printf("%d\n",sizeof(struct S1));//12 2)struct S1 { char c1;//1 char c2;//1 int i;//2+4 };//8 printf("%d\n",sizeof(struct S1));//8 3)struct S1 { double d;//8 char c;//1 int i;//3+4 };//16 printf("%d\n",sizeof(struct S1));//16 4) struct S4 { char c1;//1 struct S1 s1;//7+16 double d;//8 };//32 printf("%d\n",sizeof(struct S4));//32
结构体传参:
#include<stdio.h>#include<stdlib.h> struct S { int data[1000]; int num; }; struct S s={{1,2,3,4},1000}; //结构体传参 void print1(struct S s) { printf("%d\n",s.num); }//结构体地址传参 void print2(struct S* ps) { printf("%d\n",ps->num); } int main() { print1(s); print2(&s); system("pause"); return 0; }
结构体传参的时候,要传结构体的地址
阅读全文
0 0
- 自定义类型:结构体的内存对齐和传参问题
- 结构体和联合体的内存对齐问题
- 结构体、联合体和位断的内存对齐问题
- 结构体的内存对齐问题
- 结构体的内存对齐问题
- 结构体的内存对齐问题
- 结构体的内存对齐问题探索
- 结构体的内存对齐问题
- C++ 自定义结构体和类 内存对齐
- C++ 自定义结构体和类 内存对齐
- 结构体的内存对齐
- 结构体的内存对齐
- 结构体的内存对齐
- 结构体的内存对齐
- 结构体的内存对齐
- 结构体的内存对齐
- c语言中结构体的大小和内存对齐问题
- c语言中结构体的大小和内存对齐问题
- Jmeter压力测试(简单的http请求)
- 一天入门redis-为什么要学nosql
- STM8S 超声波模块HC-SR04实现
- 图解插入排序
- java中父类与子类的转换问题
- 自定义类型:结构体的内存对齐和传参问题
- Inception结构
- 浅谈UML学习笔记之类图
- PADS VX2.2在WIN7系统下菜单显示不完整的解决方法
- POJ2251Dungeon Master(bfs)
- 后面需要看的视频
- wpf 绑定数据无法更新ui控件可能存在的问题
- python量化分析系列之---python分别使用多线程和多进程获取所有股票实时数据
- 将Html中表格数据导出为Excel