sizeof基础
在c语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:
(1)sizeof(类型说明符)
(2)sizeof 表达式
我们通常使用第(1)种形式。
其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为:
typedef unsigned int size_t;
首先确定我们当前编译环境中c语言各个基本数据类型在内存中所占字节数,我这里是32bit编译环境:
我们这里的输出结果为:
sizeof典型问题
sizeof看起来似乎很简单,那来看看下面这段代码,你能做对几个:
实际运行 输出结果为:
简要分析:
(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的字节长度。
磁吸连接器的起源与发展
超声波发生器的原理
无人驾驶汽车的挑战:每秒生成1GB数据
曝安卓手机削减20%!年轻人30个月不换手机,智能手机卷不动了?
尼康明日迎来百周年纪念日 细数尼康一百年里十款经典机型
C语言的sizeof操作符基础和经典问题
新加坡医院推出一款听诊器式声学传感器能听出充血性心衰症状
AICALL在人工智能手机领域的战略布局与产品规划探析
研华基于AMD CPU平台的嵌入式产品,广泛应用于各个行业
重庆市副市长江敦涛一行莅临重庆芯讯通调研
锂电结构件龙头科达利的海外布局正在收获硕果
有刷电机和无刷电机的原理及区别
加拿大的客户提供“星链”服务,2021年开始覆盖全球
关于比亚迪“元”细化拆解技术分析
verilog整数四则运算的位宽考量简介
中国电信借助5G黑科技力量推出“三个一键”让用户拥有会动的电话头像
防孤岛保护装置
苹果的Apple Watch求救功能 遭Zomm起诉被指侵权
鉴别可控硅三个极的方法
精密储能点焊机的产品特征