本文 转自「嵌入式大杂烩」,喜欢的同学可以关注~

sizeof基础

在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:
(1)sizeof(类型说明符)
(2)sizeof 表达式
我们通常使用第(1)种形式。
其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为:
typedef unsigned int size_t;
首先确定我们当前编译环境中C语言各个基本数据类型在内存中所占字节数,我这里是32bit编译环境:
#include <stdio.h>

int main(void)
{
printf("sizeof(char) = %u\n", sizeof(char));
printf("sizeof(short) = %u\n", sizeof(short));
printf("sizeof(int) = %u\n", sizeof(int));
printf("sizeof(long) = %u\n", sizeof(long));
printf("sizeof(float) = %u\n", sizeof(float));
printf("sizeof(double)= %u\n", sizeof(double));

return 0;
}

我们这里的输出结果为:

sizeof典型问题

sizeof看起来似乎很简单,那来看看下面这段代码,你能做对几个
#include <stdio.h>

int main(void)
{
char *s = "hello";

printf("sizeof(char) = %u\n", sizeof(char));
printf("sizeof(char*)= %u\n", sizeof(char*));
printf("sizeof('a') = %u\n", sizeof('a'));
printf("sizeof(*s+0) = %u\n", sizeof(*s+0));
printf("sizeof(*s) = %u\n", sizeof(*s));
printf("sizeof(s) = %u\n", sizeof(s));

return 0;
}

实际输出结果为:
你懵了吗?没懵的话算我输
简要分析:
(1)sizeof(char) 的值为1。因为char类型数据在内存中占1字节。
(2)sizeof(char*)的值为4。因为char*代表一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。
(3)sizeof('a')的值为4。因为此处‘a’是独立存在的一个字符(没有赋值给其它变量),实际上就是一个整型数,占4个字节,即此处‘a’对应的ascii码的十进制为整数97。(貌似解释得有些牵强,但事实就是这样)但是需要注意的是,若有如下定义:
char ch = 'a';
则此处ch的字节数sizeof(ch)的值为1,而不是4。
(4)sizeof(*s+0)的值为4,因为'h'+0 转化为int,占4字节。此处涉及到类型转换的问题。即不同类型的数据进行运算时,会首先转换成相同数据类型。转换规则为(图片来源于网络):
(5)sizeof(*s)的值为1,因为此处*s为字符串s的第1个字符‘h’(注意与第三点区分开来,这里是有用char来修饰的),所以所占字节长度为1。
(6)sizeof(s)的值为4,同(2),此处s是一个指针,在32bit环境中为4字节,也即unsigned int的字节长度。
End:以上就是本次的分享,如有错误,欢迎指出!欢迎转发、下载、收藏、点赞
﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
免责声明:内容整理自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系,谢谢!

往期好文合集

戳这里>>
//end
若觉得文章不错,转发分享,也是我们继续更新的动力。
5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等

在公众号内回复「更多资源」,即可免费获取,期待你的关注~

长按识别图中二维码关注

sizeof你真的弄明白了吗?来看看这个例子相关推荐

  1. c语言sizeof char,sizeof 你真的弄明白了吗?来看看这个例子

    原标题:sizeof 你真的弄明白了吗?来看看这个例子 sizeof基础 在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数).其 ...

  2. sizeof你真的弄明白了吗?

    sizeof基础 在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数).其有两种表达形式: (1)sizeof(类型说明符) (2 ...

  3. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  4. java中new与newitance_你真的弄明白 new 了吗

    好久没有写点东西了,总觉得自己应该写点牛逼的,却又不知道如何下笔.既然如此,还是回归最基本的吧,今天就来说一说这个new.关于javascript的new关键字的内容上网搜一搜还真不少,大家都说new ...

  5. mysql编码问题——charset=utf8你真的弄明白了吗?

    导读:以前学习mysql的时候,一直不知道"charset=utf8"是什么意思,更不知道"set names gbk"是什么意思,通过这篇文章将会给大家详细介 ...

  6. 对于神经网络,硕博士不需要弄明白原理,只需要应用,是这样吗?

    链接:https://www.zhihu.com/question/433274875 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:匿名用户 https://www.zhihu.com ...

  7. 想做程序员?弄明白这些问题,你会少走很多弯路

    前言 几乎每一个新手程序员都会走上那么一段自学的道路,尤其是在校生或进入工作岗位之后,技术的提升基本都靠自学,有的虽然是网上报班学习,但更多时候还是自己在学习,师傅引进门,修行靠个人. 有的人自学很快 ...

  8. 无处 不在的无线智能——6g 的关键驱动与研究挑战_三星电子发布6G白皮书 网友:先把5G弄明白...

    (记者 陈洲)据韩联社报道,三星电子14日发布题为<下一代超连接体验>的6G白皮书,阐述6G愿景.白皮书中提到,第六代移动通信技术将实现T级(tera bps级)数据传输速率,无线网络延迟 ...

  9. 3分钟弄明白JAVA三大修饰符

    3分钟弄明白JAVA三大修饰符 JAVA的三个修饰:static,final,abstract,在JAVA语言里无处不在,但是它们都能修饰什么组件,修饰组件的含义又有什么限制,总是混淆.所以来总结对比 ...

最新文章

  1. 【C 语言】字符串拷贝 ( 指针使用前判空 | while 空语句 )
  2. 第一次安装Intellij IDEA过程中遇到的坑
  3. 计算机组成原理实验七,计算机组成原理实验七.doc
  4. pb string最大长度_跑马备赛训练计划大盘点,助你跑出PB
  5. php将从数据库取出的数据分为6个一组的二维数组
  6. [MySQL]经常无故崩溃amd.dll , boot1.exe病毒
  7. IBM将剥离传统IT基础设施部门;迅雷前CEO陈磊涉嫌职务侵占罪被调查 ;Python 3.9发布|极客头条
  8. MessageBox函数
  9. uploadify php demo,uploadify HTML5 版本,多图上传
  10. 啥叫全国统一大市场?
  11. wordpress批量导入html文章,wordpress文章采集发布批量上传教程(火车头)
  12. windy定义了一种windy数,不含前导零且前两个数字只差至少为2的正整数被称为windy数,求A和B之间windy数的个数
  13. html中加hover啥意思,css中hover是什么意思
  14. MDK 5.25 J-link V9 烧写程序失败
  15. golang实现iris框架最小功能的mvc
  16. 个性注释,让你的代码飞起来
  17. UVM中的TLM机制
  18. 高数-导数--隐函数求导
  19. 计算机思维与音乐关系,浅谈音乐与思维的联系.PDF
  20. Minecraft开服教程

热门文章

  1. how is SAP ui5 formatter resolved
  2. nodejs应用部署到SAP云平台的经过
  3. 在Corporate Network里配置SAP Cloud Connector连接SAP云平台,需要设置代理
  4. language dropdown list - filter logic
  5. when is IBASE status changed from inital to created - not answered
  6. Navigation execution entry point
  7. SAP Hybris Accelerator的安装和使用方式
  8. 网易纯净邮箱5元一个月,有点贵啊
  9. 一次SAP客户访谈记录
  10. 【信息系统项目管理师】常用网络标准与网络协议