结构体所占字节大小计算以及共用体大小计算

#include<stdio.h>
  struct student{
 int num;
 char sex;
 float score;
} ;
  union data{
  int k;
  char ch;
  float f;
};
 int main(void){
  printf("%d\n",sizeof(struct student));
  printf("%d",sizeof(union data));
}

详细计算见:https://blog.csdn.net/u012807459/article/details/48545141  博客,写的很好。规则要理解并且记下来。

原文地址:https://www.cnblogs.com/sunnybowen/p/8964182.html

时间: 2024-10-02 23:07:51

结构体所占字节大小计算以及共用体大小计算的相关文章

结构体所占内存大小

结构体所占内存大小划分原则: 1.划分字节,按照当前结构体中,字节数最大的类型作为划分单元.[这里面还有一些前提.下面的例子会详细说到] 2.以矩形块儿的形式划分. #include <stdio.h> /**划分示意图: 最小单元是 double所以 这个 地方按照8个字节作为最小单元来划分. */ struct student1 { double avgMark; int ID; }; /**划分示意图: 最小单元不能是数组这个地方的最小单元是 1个字节 */ struct student

C语言结构体所占内存大小

用一道面试题题引入struct str1    {         char   a;         int    b;         float  c;     double d;  };char类型占用1个字节,int型占用4个字节,short类型占用2个字节,float占4字节,double占8字节:那么我们可能会犯一个错误就是直接1+4+2=7,认为该结构体占用7个字节.这是错的.百度一了下发现这是因为计算机中存在一种叫做内存对齐的机制导致了该结果的发生. 在计算机中通常会让CPU从

结构体在内存中所占字节大小计算

作者 :卿笃军 今天上课,老师给我们演示了一下,计算结构体在内存中所占的字节大小.开始给了我们几个例子,然后要我们自己摸索出规律. 注:以下测试全是在win7_64bit  Devcpp 5.5.3环境下测试的.(char 1字节,int 4字节, double 8字节). 也许:你可能认为下面这个答案是 1+4 = 5   (×) #include <stdio.h> struct node { char a; int b; }; int main() { struct node QING;

结构体所占存储空间

原则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的.从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算). 原则二:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束:若不是,则补齐为它的整数倍.最后的元素也要按照最大元素字节数补齐. 原则三:如果是含有结构体的结构体,则是结构体里结构体成员的方式对齐,不是按照

C++主要数据类型在计算机中所占字节大小

遇到了数据存储的大端和小端问题,这你妹的看的一头雾水,发现我基本知识严重匮乏啊,先了解C++各数据类型在自己机子上占多少字节吧,以及这些数据类型所占字节大小与神马有关.各种查资料然后写代码检验,小结于本文中,给自己补补基础知识. 先来列一下C++的数据类型: 整型:int,long.这两个还分signed(有符号)和unsigned(无符号)的,当然有符号和无符号所占字节大小是一样的,就不管他了. 布尔型:bool 字符型:char,wchar_t 浮点型:float,double 这只能上代码

【c语言】结构体大小计算的例子

// 结构体大小计算的例子 // 默认对齐数为4 #include <stdio.h> union tagAAA { struct { char ucFirst;//1 short ucSecond;//2 char ucThird;//1 }half; short kk;//2 }number; struct tagBBB { char ucFirst;//1 short ucSecond;//2 char ucThird;//1 short ucForth;//2 }half; struc

union中结构体整合后字节对齐问题

续上篇博文:http://www.cnblogs.com/flamefox/p/4241176.html 上次把结构体的编译问题解决了,这次又来了新问题,客户端和服务器访问相同的结构,出现了bug 原始的代码如下(结构1): struct MsgInfo { union { struct //for exp { OBJID idType; USHORT usLevel; UINT unExp; }; struct //for learn { OBJID idType; USHORT usLeve

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

结构体大小的计算,.网上说法一大堆还都不一样分什么对齐不对齐,偏移量什么的.. 在此稍微举例简单总结下: 对齐原则:每一成员的结束偏移量需对齐为后一成员类型的倍数 补齐原则:最终大小补齐为成员中最大值的倍数 拿个题目做例子:[(开始偏移量)+此处字节 = 结束偏移量] 1 struct MyStruct 2 { 3 int i; // (0) + 4 = 4,后面一个为2,已经对齐 4 char c; // (4) + 2 = 6,后面一个为结构体,直接拆开看第一个,int=4,所以对齐为(4)

C语言08字符串 &amp; 预处理 &amp; 结构体

项目开发中字符串模型建立 strstr的while dowhile模型 //int cltClient_rev(void *handle, unsigned char *buf, int *buflen) //不要相信别人给你传送的内存地址是可用的 int getCout(char *str, char *substr, int *count) { int rv = 0; char *p = str; int ncout = 0; if (str==NULL || substr== NULL |