查看结构大小c语言,C语言中结构体大小计算

1.普通结构体

struct student

{

char sex;

char a;

char b;

int age;

char name[100];

};

该结构体大小为108

解答:

1.先算struct的对齐大小,对齐的大小也是取决于struct成员中字节对齐最大的那个;在给的题目中就是int类型,也就是4byte。如果结构体成员小于4byte,需要补齐填满4byte

2、三个char类型虽然只有3byte,但是为了4byte对齐,也需要填充为4byte。所以总的大小就是(1+1+1=4)+4+100 = 108

2.结构体数组

struct student{

char name[10];

int score;

};

struct student class[5];

int length = sizeof(class);

printf("结构体大小为%d\n",length);

输出结果为80

解答:按照正常计算应该为(10+4)*5=70;但是这里需要考虑字节对齐的情况,所以按照int类型对齐,大小为80

3.结构体指针数组

struct student{

char name[10];

int score;

};

struct student class[5];

int length = sizeof(class);

printf("结构体大小为%d\n",length);

输出结果为40

解答:不管结构体内的元素个数和大小,数组中每个元素所存放的都是指针地址,即为整数,占8个字节,所以大小为5*8=40;

关于C语言中结构体大小计算

结构体大小的计算,.网上说法一大堆还都不一样分什么对齐不对齐,偏移量什么的.. 在此稍微举例简单总结下: 对齐原则:每一成员的结束偏移量需对齐为后一成员类型的倍数  补齐原则:最终大小补齐为成员中最大 ...

C++字节对齐与结构体大小计算

转载注明出处:http://pppboy.blog.163.com/blog/static/30203796201082494026399/ 感谢原创博主的辛勤成果. 说明: 结构体的sizeof值, ...

C/C++ sizeof函数解析——解决sizeof求结构体大小的问题

C/C++中不同数据类型所占用的内存大小 32位                 64位 char               1                    1 int           ...

C语言中结构体对齐问题

C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)

在windows下设置字节对齐大小的方式,目前我了解有三种: 1. 在编译程序时候的编译选项  /Zp[n],如 cl /Zp4 表示对齐大小是4字节: 2. 预处理命令   #pragma pack ...

Go语言中结构体的使用-第2部分OOP

1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

C语言中结构体赋值问题的讨论

今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

C语言中的调试小技巧

C语言中的调试小技巧 经常看到有人介绍一些IDE或者像gdb这样的调试器的很高级的调试功能,也听人说过有些牛人做工程的时候就用printf来调试,不用特殊的调试器.特别是在代码经过编译器一些比较复杂的 ...

C语言中结构体赋值问题的讨论(转载)

今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

随机推荐

OpenGL大作业

GLfloat light0_position[] = { 15.0,15.0,15.0,10.0 };//定义光源位置 103glLightfv(GL_LIGHT0, GL_POSITION, li ...

InterBase数据库迁移到MySQL(数据导出)

这篇我将记叙我的第二个脚本程序,这篇我使用InterBase数据库提供的“isql”命令来导出我所要的数据,但是由于“isql”命令没有直接导出数据的语句,说以我采用的是导入一个配置文件,在这个文件中 ...

zynq 之u-boot

u-boot 启动文件分析 u-boot首先执行的文件:C:\Users\summer_spinach\Desktop\zynq_linux相关\linux\uboot内核\u-boot-xarm\a ...

mysql window下tmpdir空间耗尽

修改my.ini或my-default.ini文件[mysqld]下方配置 tmpdir = D:/tmp

转:web_custom_request 函数

语法:Int web_custom_request (const char *RequestName, , [EXTRARES,

Redis学习-持久化机制

Redis持久化的意义 在于故障恢复 比如你部署了一个redis,作为cache缓存,当然也可以保存一些较为重要的数据 如果没有持久化的话,redis遇到灾难性故障的时候(断电.宕机),就会丢失所有的 ...

Linux环境下mysql主从同步环境搭建

#my.cnf添加内容vim /etc/my.cnf添加以内容: ## replicationserver_id=195binlog-ignore-db=mysqlbinlog_format=mixe ...

Java语法基础学习DayNineteen(反射机制)

一.Refection定义 1.概述 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性 ...

hdoj 1874 畅通project续【SPFA】

畅通project续 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Su ...

更改 pandas dataframe 中两列的位置

更改 pandas dataframe 中两列的位置: 把其中的某列移到第一列的位置. 原来的 df 是: df = pd.read_csv('I:/Papers/consumer/codeandpa ...

你可能感兴趣的:(查看结构大小c语言)