当前位置: 首页 > news >正文

sizeof判断所占空间大小

功能:计算数据类型所占空间大小;
返值:返回数据类型所占空间大小,如果判断字符串实际长度,包括‘\0’在内;

与strlen比较:

功能:计算字符串长度
返值:返回字符串实际长度,不包括‘\0’在内;

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main(int argc, const char *argv[])
 5 {
 6     int a = 10;
 7     double b = 20;
 8     char c[10] = "hello";
 9     char d[] = "hello";
10 
11     printf("size(a) = %d\n",sizeof(a));
12     printf("size(b) = %d\n",sizeof(b));
13 
14     printf("size(c) = %d\n", sizeof(c));
15     printf("len(c)  = %d\n", strlen(c));
16 
17     printf("size(d) = %d\n", sizeof(d));
18 
19     return 0;
20 }

结果:

 

难点:sizeof判断结构体所占空间大小

字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:
1、 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2 、结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,
  如有需要编译器会在成员之间加上填充字节(internal adding);
3 、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最
  末一个成员之后加上填充字节(trailing padding)。

 1 #include <stdio.h>
 2 
 3 struct {
 4     int a;
 5     int b;
 6 }s1;
 7 
 8 struct {
 9     int a;
10     short b;
11     int c;
12 }s2;
13 
14 struct {
15     int a;
16     char b;
17     short c;
18 }s3;
19 
20 struct {
21     char a;
22     char b;
23     char c;
24 }s4;
25 
26 
27 int main(int argc, const char *argv[])
28 {
29     printf("s1 = %d\n",sizeof(s1));
30     printf("s2 = %d\n",sizeof(s2));
31     printf("s3 = %d\n",sizeof(s3));
32     printf("s4 = %d\n",sizeof(s4));
33 
34     printf("a = %p\n",&s3.a);
35     printf("b = %p\n",&s3.b);
36     printf("c = %p\n",&s3.c);
37 
38     
39     return 0;
40 }

结果:

 

转载于:https://www.cnblogs.com/pxl0/p/6393283.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • flex滚动字幕和图片效果
  • 一个IP,一个linux服务器,两个项目,两个域名;如何将两个域名配置到同一个IP的两个项目中。...
  • java生成PDF格式文档
  • VRRP笔记三:配置keepalived为实现haproxy高可用的双主模型配置文件示例:
  • 记一次Arch的安装经历
  • windows xp常用命令集
  • eclipseJVM terminated. Exit code=-1
  • java图片验证码
  • copyEvens
  • 字符设备驱动程序之异步通知
  • HTTP 错误 403.9 - 禁止访问:连接的用户过多
  • 如何使用flex皮肤
  • 查看进程占用的文件和文件数目
  • 动态创建DataGrid 列
  • Vue.js基础入门
  • 2017-08-04 前端日报
  • create-react-app做的留言板
  • docker-consul
  • Docker容器管理
  • laravel 用artisan创建自己的模板
  • nodejs:开发并发布一个nodejs包
  • Webpack 4 学习01(基础配置)
  • web标准化(下)
  • 构建工具 - 收藏集 - 掘金
  • 关于extract.autodesk.io的一些说明
  • 如何使用 JavaScript 解析 URL
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数据仓库的几种建模方法
  • 微服务入门【系列视频课程】
  • 新手搭建网站的主要流程
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 终端用户监控:真实用户监控还是模拟监控?
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • #《AI中文版》V3 第 1 章 概述
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (三)docker:Dockerfile构建容器运行jar包
  • (三)uboot源码分析
  • (原創) 未来三学期想要修的课 (日記)
  • (转)创业的注意事项
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .NET程序员迈向卓越的必由之路
  • .net反混淆脱壳工具de4dot的使用