科百科
当前位置: 首页 范文大全

c语言sizeof运算符主要用于(C语言快速入门初识sizeof运算符)

时间:2023-07-11 作者: 小编 阅读量: 4 栏目名: 范文大全

很明显这可以采用更合理的方式解决,这便是sizeof。这可以通过使用sizeof运算符来测量。这里有两点需要注意:sizeof是运算符而不是函数。不管传递给sizeof是的变量还是类型,最终计算的是类型占据的大小。因此我们将一个数组对象传递给sizeof运算符,它便会计算出整个数组元素所占用的字节数。以测试数组中的例子而言,sizeof遇到a之后,它知道a是一个含有9个int型数据的数组,c则是一个含有8个字符的char型数组。

在上节内容中,我们使用符号常量解决了数组元素个数可维护性的额外负担。然而数组有一种不指定元素个数的形态,通常是用于有固定元素个数的数据,这种情况下很少为其单独定义符号常量。如果要用循环遍历数组或非要为其定义符号常量,那可以通过数数的方式来进行。

假定你采取了数数的方式,一旦增加或减少数组元素个数,与该数组有关的流程就存在发生BUG的可能性。很明显这可以采用更合理的方式解决,这便是sizeof。

sizeof运算符

在C语言中,一个char类型的变量占用一个字节的存储空间,那int类型与float类型呢?这可以通过使用sizeof运算符来测量。

使用sizeof运算符时,需要提供变量或类型参数(如果是表达式,则按表达式结果的类型计算),返回该变量或类型以byte为单位所占用的空间大小。

  • 如果是实参是类型,那么sizeof得到的结果是此类型的大小;
  • 如是实参是变量,那么sizeof得到的结果是此变量的类型的大小,这个值永远会比0大。

这里有两点需要注意:

  1. sizeof是运算符而不是函数。
  2. 不管传递给sizeof是的变量还是类型,最终计算的是类型占据的大小。

因此测试一个int类型变量的大小与测试int类型自身得到的结果是一致的,这里的程序显示了在32位环境下,我们学习的已知变量类型的大小。

测试数组

关于sizeof需要牢记的便是:不管传递给sizeof是的变量还是类型,最终计算的是类型占据的大小。因此我们将一个数组对象传递给sizeof运算符,它便会计算出整个数组元素所占用的字节数。

根据第一个程序的结果我们知道sizeof(int)=4,那么这里sizeof(a)=4(字节)*9(元素)=36个字节。同样sizeof(c)=8。知道了数组对象的总大小,除以元素的类型,便是数组元素的个数,下面是程序运行结果。

需要注意在计算数组a的元素个数时,我们采用的表达式为:sizeof(a)/sizeof(int);而数组c则采用的是传递变量的形式sizeof(c)/sizeof(c[0])。使用第二种方式的优势在于,当你改变数组类型时,则不必改变求值表达式。假设采用方式一,你现在将数组a由int型改为float型,那表达式需要相应的更改为:sizeof(a)/sizeof(float)。

抢答送分题

思考一下:在表达式sizeof(c)/sizeof(c[0])中,为什么使用数组的第一个元素,而不是其它元素,使用其它元素行吗?

只要你使用的元素没有越界,那么使用数组哪个元素都是可行的。之所以使用0号元素,因为数组也存在只有一个元素的情况,如果你使用sizeof(c[1]),就会在不经意间造成越界访问。之所以能够使用任何一个未越界的元素,另一个深层的原因是:数组是存放同一类型数据的集合,这在数组的特性中提到过,并且sizeof最终计算的是类型占据的大小,sizeof(c[0])与sizeof(c[5])都是测试sizeof(char)类型占用的空间。

确认数组类型

再次重申一下,不管传递给sizeof是的变量还是类型,最终计算的是类型占据的大小

以测试数组中的例子而言,sizeof遇到a之后,它知道a是一个含有9个int型数据的数组,c则是一个含有8个字符的char型数组。sizeof(a)事实上相当于测试sizeof(int[9]),sizeof(c)就是sizeof(char[8]),所以a的类型是int[9], c的类型是char[9]。你可以把下列代码加入到程序中,会发现这两种类型占用的存储空间与我们程序表述的一致。

当然,如果使用C,我们可以很轻松的看到数据的真实类型。下列程序使用typeid取得变量的类型对象,并打印出类型名称。

    推荐阅读
  • 怎样快速认识三角形和几何图形(数学科普谈对最简图形三角形的认识)

    正因为它的最简性和应用广泛性,迫使人们对它加以关注并进行研究。进一步得到直角三角形中两锐角互余,并进行了证明。又发现等边三角形每角为60度,三角和为180度。人猜测任意三角形三内角和为180度,最后完成了证明。当两个三角形形状相同大小不同时,规定它们为相似三角形。全等三角形面积相等,相似三角形面积比等于相似比的平方。任何封闭图形面积可分割成三角形来求。②已知两边及其夹角,求其余边角。

  • 梦见鱼(最新解梦说法)

    接下来我们就一起去研究一下吧!梦见鱼因为“鱼”和“余”谐音,在中国传统的解梦观点中,梦见鱼一直和财富密切相关。梦见鱼在清水中游动,象征你将得到财富和权力,或表示你现在的心情和处境很好,也可能预示你会有意外的收入或地位得到提升。梦见大鱼不停的在动,意味着你的名气会有所增加,你可能会因为某个善举而获得别人的认可,受到别人的尊重。

  • 吃饭857什么意思(857的意思)

    下面更多详细答案一起来看看吧!吃饭857什么意思857,网络流行语,指蹦迪神曲《bowchibow》和《feelmybass》副歌里面的空耳,现已发展成蹦迪的代名词。并且引申出处晚上八点出去蹦迪,凌晨五点回来,然后一个星期去七次的意思。出处:该梗最近爆火,源自抖音视频孩子问父母“你知道什么是857吗?”话音一落,音乐响起,摇就对了,看老爸老妈怎么花式揍你就完事儿了。

  • 三国志战略版提高武力值的战法(用实战解读信符)

    前言截止今日,一赛段的战斗已经进入到了15天。能触发主将的奇谋效果,但最大问题是垃圾的发动概率。真正合适这个信符的应该是孙权、张辽、香香等武将,但部分武将目前的出场率堪忧。提醒一点,乡勇相当于护盾,并不是实际治疗,战斗结束后会回收。减免后灼烧伤害为700,而藤甲反噬伤害是3000,并非2100。实测放到蜀枪身上,这概率至少在60%。目前战场上常见的西凉骑有两支:周凌香,周太香。

  • 劳动用工登记备案技巧(河北省劳资员注意了)

    2022年7月2日零时起旧系统停止使用,进行历史数据转换;7月3日进行切换上线,测试运行;7月4日零时起“河北省劳动用工企业薪酬信息系统”正式上线运行。请务必按提示内容,如实填报用人单位信息。例如,市直备案业务,在南湖市民服务中心做现场业务,就要选择可选择项目的最后一个“唐山市市本级”。新系统上线可能会遇到诸多问题,请及时与用人单位所在地备案部门进行联系,及时解决业务操作中的问题。

  • 韩语基础教学从零开始(零基础韩语学习步骤)

    零基础韩语学习步骤从接触韩语到现在为止,约莫已经5年了虽然我是从“안녕하세요

  • 家常金针菇牛肉煲怎么样做(一周吃三次的金针菇牛肉煲这样做)

    哈喽大家好,我是懒惰的小厨娘又到了跟大家分享美食的时刻了,你们都吃了吗?家里还有上次吃火锅剩下的金针菇不知道怎么吃才好,就问了一下朋友们平时是怎么吃得,有一个好友就给小厨推荐了一个新吃法。下面就跟着小厨一起来看看吧!再放入洋葱和金针菇,再将我们腌制好的牛肉放在金针菇上面,再加入半碗清水,盖上盖子中火焖上5-8分钟,最后我们在撒点青红辣椒来增添点颜色,这样看起来就色香味俱全了。

  • 周末愉快早安的句子(适合周末问候的句子)

    一周欢声笑语过,烦恼无聊都没辄。有一种关系叫情深似海,有一种牵挂叫难以释怀,有一种季节是春暖花开,有一种祝福随短信而来:祝亲爱的朋友周末愉快,笑口常开!