导航:首页 > 计算方法 > c语言结构体字节大小计算方法

c语言结构体字节大小计算方法

发布时间:2022-06-11 10:43:40

A. C语言结构体所占用的字节数如何计算

结构体的数据类型的有点多我们就不啰嗦了,直接来看相同数据结构体的几种书写的格式吧。

格式一:

01.structtagPhone
02.{
03.charA;
04.intB;
05.shortC;
06.}Phone;

格式二:

01.structtagPhone
02.{
03.charA;
04.shortC;
05.intB;
06.}Phone2;

格式三:

01.structtagPhone3
02.{
03.charA;
04.charB[2];
05.charC[4];
06.}Phone3;


我们都知道,char类型占用1个字节,int型占用4个字节,short类型占用2个字节,long占用8个,double占用16个;

那么我们可能会犯一个错误就是直接1+4+2=7,该结构体占用7个字节。这是错的。

以下我们简单分析下:

计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取决于结构体中最大基本类型的大小。

对格式一:

上面结构计算大小,sizeof(Phone3) = 1 + 2 + 4 = 7, 其大小为结构体中个字段大小之和,这也是最节省空间的一种写法。

总结:

第一种写法,空间浪费严重,sizeof 计算大小与预期不一致,但是保持了每个字段的数据类型。这也是最常见的漫不经心的写法,一般人很容易这样写;


第三种写法,最节省空间的写法,也是使用 sizeof 求大小与预期一样的写法,但是全部使用字节类型,丢失了字段本生的数据类型,不方便使用;


第二种写法,介于第一种和第三种写法之间,其空间上比较紧凑,同时又保持了结构体中字段的数据类型。


只要了解是这些写法的差异性,可以视情况选用。

B. C语言中结构体数组长度怎么计算

结构体数组的长度计算方法和普通数组相同。
1、c语言中,定义数组后可以用sizeof命令获得数组的长度(即可容纳元素个数)。但是通过传递数组名参数到子函数中,以获得数组长度是不可行的,因为在子函数当中,数组名会退化为一个指针。
2、例如:
int
data[4],length;
length=sizeof(data)/sizeof(data[0]);
//数组占内存总空间除以单个元素占内存空间大小,即等于元素个数
printf("length
of
data[4]=%d",
length
);
//输出length
of
data[4]=4

C. C语言求结构体sizeof怎么求

sizeof()用来测给定的数据类型在内存中占的字节长度;
比如我想知道int类型变量占几个字节 就这样使用:len = sizeof(int) 就可以了,len就是int型变量在内存中字节数;
当然你也可以这么用 int a; len = sizeof(a); 编译器会知道a是int型变量的,会自动换成sizeof(int);
另外 自己定义的数据类型也可以用sizeof来求字节数,比如定义了一个类class A{...},然后你
这样用:len = sizeof(A),就能知道A占了几个字节;
最后,提示下,sizeof是关键字或者说是运算符,不是函数,它的结果是编译的时候就确定了的,没有函数调用;

D. C语言,结构体问题所占内在字节数,怎么算的

在c语言中如何计算结构体长度和共用体长度?
结构体的长度等于体内各个成员变量长度之后。如此题长度为字符串数组的长度加上两个int型变量的长度,再加上double长度,最后结果为10+2+2+8=22。解析:char 每个字符占一个字节(因为是一个十长度的字符数组)所以是10字节,int占两个字节,double占8个字节。所以最后是10+2*2+8=22。
共用体的长度是体内成员中最长的长度。如果一个共用体内最长长度为12字节,则共用体的长度就是12。
希望能够帮到你。如果还有什么问题在问?

E. c语言结构体的问题,存储空间大小

win32
4字节对齐
变量内存的起始地址的边界是跟它类型一致的
比如int类型,可以认为它存在4的倍数的地址,short存在2字节倍数开始的地址,char存在1字节开始的地址,即任意地址
因此,回过头来看
第一个结构
假设int
a;///4字节倍数地
short
b;//推理a的末尾是4字节倍数地址也是2字节倍数地址,所以b是挨着a存的
char
c;//任意其实地址,挨着b存放
看起来7个字节就放下了,但是需要兼顾4字节对齐的原则,在末尾补了一个字节
第二个结构也类似
结构体与普通类型并无大区别,存储区域也一样的

F. C语言结构体及长度问题

C语言 标准类型中 有 long int 和 short int, 但没有规定 int 长度
一般编译器把 int 处理成 long int ( 4 Bytes), 少数编译器 把 int 处理成 short int ( 2 Bytes),
struct stu
{ short int Number; // 处理成 short , 2 字节
char Name[10];
} a;
sizeof(a) 等于 12
------------------------
struct stu
{ long int Number; // 处理成 long, 4字节
char Name[10]; // 考虑 4 字节对齐,+2
} a;
sizeof(a) 等于 16
======================
sizeof(b)的值 (32位系统) 一般编译器处理成 unsigned long int 得 4
老式编译器, (16位系统) 处理成 unsigned short int 得 2
===
你的题目源于老编译器,老的16位系统,或老旧的教材。

G. c语言 结构体 共用体 占内存字节

共用体:
sizeof(union
data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么整个共用体应该占9个字节,但按照对齐原则,实际分配给它的内存为16字节。
结构体:
struct
data以8个字节对齐,long类型的成员1分配8个字节。s、i、c、a原本分别占4、2、1、10个字节。由于考虑到对齐,s分配4个字节,i分配
2个字节,c分配2个字节,此时刚好用完8个字节。a原本分配10个字节,由于考虑到对齐,要使整个结构体所占的存储空间是8的倍数,所以分配给它16个字节。因此结构体data占8+4+4+2+16=32个字节。

H. C语言中,在说明一个结构体变量时系统分配给它的存储空间怎么计算

struct dog
{
char ch[10];
int i;
int *p;
double k;
}dog1;

在c语言中如何计算结构体长度和共用体长度?
结构体的长度等于体内各个成员变量长度之后。如此题长度为字符串数组的长度加上两个int型变量的长度,再加上double长度,最后结果为10+2+2+8=22。解析:char 每个字符占一个字节(因为是一个十长度的字符数组)所以是10字节,int占两个字节,double占8个字节。所以最后是10+2*2+8=22。
共用体的长度是体内成员中最长的长度。如果一个共用体内最长长度为12字节,则共用体的长度就是12。
希望能够帮到你。如果还有什么问题在问?

I. C语言中的结构体的大小如何计算

库函数sizeof();参数是结构体的变量。如果你自己计算的话就是每个结构体成员的大小相加,不同编译器下是不同的,所以用sizeof()比较好。int
有的编译器是2字节,有的就是4字节。你举得例子就是int
2字节+float
4字节+char
1字节。

J. C语言计算结构体长度问题

struct tt;
{
int n1;char n2;float n3;//因为4字节对齐,这里是12个字节
union uu//这里是个union,所以里面的内容最大的,作为它的大小,所以是用int u1[2],占8个字节
{
int u1[2];char u2[2];
}su;
};
最后的结果,应该是12+8= 20
11是绝对不正确的。
值得注意的是,编译器有些可以设置对齐方式的,会影响结构体的大小

阅读全文

与c语言结构体字节大小计算方法相关的资料

热点内容
你到底用什么方法掠走我的芳心 浏览:41
确定剪切连接件的方法 浏览:50
邦列安使用方法 浏览:792
如何给自己洗头发的正确方法 浏览:364
1723减23x7用简便方法怎么计算 浏览:524
高阶段如何制定有效的学习方法 浏览:86
如何将数据转换成数字方法 浏览:595
描写方法有哪些各有什么作用 浏览:425
间接测量方法包括 浏览:990
燧石杂质解决方法 浏览:1004
如何毛孔变小最快最简单的方法 浏览:632
弯管计算方法 浏览:103
荨麻疹快速治疗方法是什么 浏览:103
手机去内存方法 浏览:65
小米note3音乐在哪里设置方法 浏览:87
柚子茶制作方法图片 浏览:824
心理学与治疗的研究方法 浏览:692
学生在校时间的计算方法 浏览:536
大数字相加的简便运算方法 浏览:989
研究学霸学习的方法 浏览:653