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

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

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

很明显这可以采用更合理的方式解决,这便是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取得变量的类型对象,并打印出类型名称。

    推荐阅读
  • 外资公司注册资料办理流程(注册公司流程及资料)

    安徽合肥注册公司流程及材料材料:1、公司名称:;,今天小编就来说说关于外资公司注册资料办理流程?外资公司注册资料办理流程安徽合肥注册公司流程及材料材料:1、公司名称:;2、注册地址:;3、注册资本:;4、经营范围;5、法人、所有股东、监事身份证正反面的照片以及手机号6、职位:以及股东占股明细流程:1、先核名;名称申报后提交设立,设立完成提交审核。全程可在网上提交。

  • 肯德基是如何赢得吃货们的认可(别只会傻傻点套餐)

    导读:吃肯德基时,别只会傻傻点套餐,要点就点这3种,店员:资深吃货!像今天给大家分享的肯德基,相信大家在日常生活中也是相当常见的。所以,今天,小编将重点与你分享我们在吃肯德基时应该如何正确点餐,让我们一起来了解一下。相对于其他肯德基套餐,可能会便宜很多。说到这个食物,其实一般在肯德基都有。

  • 从文物看古人的才智(文物说史古人的风雅)

    无须多语,琴声已将一切诉说。竹林七贤中与琴的缘分最深者是嵇康。对嵇康来说,琴与音乐是生活中必不可少的部分,乃至生命即将终了,也要与琴相伴。客人教会嵇康弹奏《广陵散》后,嘱咐他不得外传,遂起身而去。在行刑那天,三千太学生聚集在刑场前,要求任命嵇康为太学的老师,这要求自然遭到了拒绝。《广陵散》之不绝,或许在于人们同情于嵇康的遭遇,感佩于嵇康的人格魅力,人逝曲犹存,代代永传承。

  • 张继他的诗有什么特点(张继的这首诗只有4句)

    并且诗中寒山寺也拜其所赐,成为远近驰名的游览胜地。《枫桥夜泊》月落乌啼霜满天,江枫渔火对愁眠。首先,我们整体来看这首诗,可知它以一“愁”字统起,并且先后用了落月、啼乌、满天霜、江枫、渔火、姑苏城、寒山寺、客船、钟声,共9种景象。为此,张继今夜势必就会对愁而眠了。纵观张继这首诗,除了短短4句,连用了9种景象,让人赞不绝口外。

  • 羊绒衫有静电是什么原因(羊绒衫有静电是什么原因呢)

    也可以用一个小喷雾器喷点水雾,比擦拭更方便快捷。

  • 杀无赦是什么意思(杀无赦意思是什么)

    以下内容希望对你有帮助!杀无赦是什么意思杀无赦-读音:shāwúshè释义:杀人者罪不得赦。《尚书·胤征》:主历之官,为历之法,节气先天时者杀无赦,不及时者杀无赦。唐柳宗元《驳复仇议》一文,首见“杀无赦”一词:“若曰:无为贼虐,凡为子者杀无赦。”

  • 唐高宗李治厉害吗(李治是被历史误解了吗)

    史称,是因太宗去世,他哀毁过礼,即落下疾病。高宗未及正式登基即下令,“罢辽东之役及诸土木之功。”这一时期,大唐政治清明、疆域辽阔、经济繁荣、国家太平,被史家称为“永徽之治”。在处置危及皇位安全的重大事件中,也未见昏懦和缩手缩脚。事情败露后,高宗即命长孙无忌调查,房遗爱声称,太宗三子吴王李恪是主谋。代表了人类封建文明史法制最高成就,成为亚洲国家立法的典范与来源。"这与太宗服食丹药而死形成了强烈对比。

  • 东莞东森汽车销售(东部市场贵州产品)

    日前,记者从相关部门得知,2月18日,5辆蓝白相间的万仁新能源汽车在东莞市东城街道的各工业园区内跑了起来。为进一步推进东西部协作,2021年12月,东莞市东城街道投资促进中心和万山区万仁新能源汽车“搭上了线”,决定在万山购买5辆新能源巡逻车用于工业园的日常巡查工作。据了解,东莞市东城街道投资促进中心购买的这5辆新能源巡逻车已经分派给了各工业园区,其中东城科技工业园2台、外经工业园2台、市郊工业园1台。

  • 电脑开机后出现初始化失败是怎么回事(带你深入了解原因所在)

    接下来我们就一起去了解一下吧!电脑开机后出现初始化失败是怎么回事按电源开关后,立刻不断点击键盘上的F8键,会出现以下界面,如果未能出现以下界面,可以重新启动电脑进行此操作。此时用键盘“↓”键选择“安全模式”按两次“回车”进入安全模式。如果此时显示“配置windowsupdate失败,还原更改,请勿关闭计算机”,此时不需要做任何操作,请耐心等待。之后电脑会自动重启,重启后就能正常进入系统。