C语言结构体大小

news/2024/11/8 14:56:06/

C语言结构体求大小

引入一个知识,我这里会写的比较少,大家可以打开自己的课本查看。

1、结构体变量的首地址,必须是结构体变量中的“最大基本数据类型成员所占字节数”的整数倍。(对齐)

2、结构体变量中的每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节的整数倍。(对齐)

3、结构体变量的总大小,为结构体变量中“最大基本数据类型成员所占字节数”的整数倍(补齐)

下面是一些例子,博主带大家来计算大小┗|`O′|┛ 嗷~~ (别看俺的字丑,俺其实可温柔了)

首先是不含指针(有数组的情况下,且数组大小不为0)

//
// Created by 18751 on 2023/5/30.
//
#include<stdio.h>typedef struct struct1{int first;    //首先是int4字节double second;//下来的基本数据类型是double8个字节,但是这个结构体成员之前。只有四个字节,我们补足内存大小到这个成员基本数据类型的整数倍,即在int的基础上加4char third[5];//基本数据类型位char,直接加5.现在是21int fouth[3];//基本数据类型为int,补足内存到24然后+12
}struct1;//例一//到这里还没有结束,因为最大数据类型为8,所以最终的结果也要是8的整数倍,向上取整。就到了40
int main(){struct1 example1;printf("%d",sizeof(example1));
}

有指针的情况的话,32位和64位指针大小分别为4和8字节,与上面一样

下面是包含柔性数组的结构体

因为柔性数组本身是无法确定有几个字节的,所以计算整体结构体大小时,会省略柔性数组的计算。在使用的时候分配内存就可以。

//
// Created by 18751 on 2023/5/30.
//
#include<stdio.h>typedef struct struct1{int first;double second;char third[5];int fouth[3];int fifth[0];
}struct1;int main(){struct1 example1;printf("%d",sizeof(example1));
}

所以这个计算的结果和上面的大小一样,也是40.Tips柔性数组不可以在结构体中单独存在,柔性数组不可以作为结构体的第一个成员

明天出一下柔性数组的使用


http://www.ppmy.cn/news/109994.html

相关文章

基于Android应用开发实现UWB(超宽带)通信

什么是超宽带UWB 超宽带通信是一种无线电技术,专注于设备之间的精确测距(测量位置的精度为 10 厘米)。这种无线电技术可以使用低能量密度进行短距离测量,并在大部分无线电频谱上执行高带宽信号传输。UWB 的带宽大于 500 MHz(或超过 20% 的小数带宽)。 从 Android 13 开…

linux环境, nginx https配置

在 Linux 环境下&#xff0c;配置 Nginx 的 HTTPS 需要以下步骤&#xff1a; 1. 安装 OpenSSL sudo apt-get install openssl 2. 生成 SSL 证书和私钥 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/ngi…

【编译、链接、装载二】/lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录

【编译和链接二】bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter: 没有那个文件或目录 一、问题起因二、ldd查看三、解决方案一&#xff1a;使用gcc链接四、查找其他解决方案五、解决方案二&#xff1a;软链接 bash: ./test.out: /lib/ld64.so.1: bad ELF interpreter…

MySQL进阶 -存储引擎

目录 存储引擎MySQL的体系结构存储引擎简介InnoDB存储引擎MyISAM存储引擎Memory存储引擎InnoDB&#xff0c;MyISAM和Memory的区别存储引擎的选择小结 存储引擎 MySQL的体系结构 MySQL的体系结构图&#xff1a; MySQL服务端的体系结构&#xff08;MySQL Server&#xff09;&am…

CAPL(vTESTStudio) - CAPL、CANoe、Panel联动

目录 一、变量设置 ① dbc文件中的Environment variables变量

01- 线程和进程,并发和并行(Windows系统)

要点&#xff1a; 进程是操作系统资源分配的基本单位&#xff0c;而线程是处理器任务调度和执行的基本单位。 参考文章&#xff1a;Python3多进程(mutiprocessing) 一 线程和进程的区别 主要介绍了线程和进程的区别及Python代码实例,本文给出了一个python的脚本让一个进程中…

手机常识汇总

目录 一、手机历史介绍 第一代模拟制式手机(1G) 什么是模拟网? 模拟网络与数字网络的区别 数字通信与模拟通信相比具有明显的优点: 第二代数字手机(2G) 什么是“GSM” 什么是 “CDMA”? GSM 数字机和模拟手机话音相比 什么是“GSM/CDMA 双模机”? 什么是“TDMA”…

spring cloud Alibaba之Nacos Discovery--服务治理 (二)

接着上一篇文章 搭建的微服务环境, 实现nacos 注册中心实战操作案例 一. 服务治理介绍 先来思考一个问题 通过上一章的操作&#xff0c;我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 &#xff08;ip&#xff0c;端口&#xff09;等硬编码到了代码中&a…