c语言 手动实现sizeof,sizeof究竟是怎样实现的?

sizeof,是在编译的时候,查找符号表,判断类型,然后根据基础类型来取值的,如果是struct则是看类型声明符号表来判定,如果字符串则是通过常量表来判断,具体可以参考编译原理的符号表管理章节,一般都有讲,如果没讲,不要读这本书,呵呵关于sizeof的一般性的问题,相信大家已经见过很多了。本文讨论的是一些不常见的细节。关于sizeof的更多细节:1、sizeof(i++)之后,i的值会怎样?答案是...
摘要由CSDN通过智能技术生成

sizeof,是在编译的时候,查找符号表,判断类型,然后根据基础类型来取值的,如果是struct则是看类型声明符号表来判定,如果字符串则是通过常

量表来判断,具体可以参考编译原理的符号表管理章节,一般都有讲,如果没讲,不要读这本书,呵呵

关于sizeof的一般性的问题,相信大家已经见过很多了。

本文讨论的是一些不常见的细节。

关于sizeof的更多细节:

1、sizeof(i++)之后,i的值会怎样?答案是不变。记得大一初学C语言时想研究一下sizeof与函数有什么区别,得到的结果只

是一些语法上的差别;学了汇编之后看看编译器生成的代码,才发现sizeof在编译时直接给定了一个常值,而非在运行时求值。进而又分析过

sizeof(表达式)的结果,清楚了类型提升原理。但我之前没有注意过表达式中出现副作用的问题,于是在sizeof(i++)的问题上犹豫了。现在经

过查阅资料和实验,结论是:sizeof在大多数情况下是编译时定值的,表达式中的任何副作用(包括有副作用的运算符、函数调用等)都不会发生。这里说

“大多数情况”,排除了针对C99的新特性——不定长数组(variable length

array)的特例。参考这篇文章(http://rednaxelafx.javaeye.com/blog/225909),如果sizeof运算符

的参数是一个不定长数组,则该需要在运行时计算数组长度。

2、sizeof('a')的结果是多少?这个要看是在C中还是C+

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值