C-不要再将sizeof当成一个函数了

sizeof

前言

sizeof在C语言中,并非函数,也并非宏定义,而是运算符,优先级第一档。
之所以经常不加区分的认为这是函数,只是因为没有思考的使用过后就会自我取纳这样的想法。毕竟,它是那么像一个函数。
但是只要记住,它传变量的同时,还可以判断数据类型这一点,你就不应该将他认为是一个函数了。毕竟函数定义时候的形参可不能只是一个数据类型,况且它也不是一个字符串,我们无法匹配。(虽然函数调用中涉及的栈帧,可以通过寄存器的使用来达到不需要形参名的效果,但是这已经属于中间代码了,并非源代码)
因此,我们会发现,在实际使用的时候,我们也无法去看到sizeof的定义。因为他是编译原理中,较之函数更为底层的东西。但是可以通过源码查看。reference:GCC

使用

多多益善,多去对比使用,更多考察的是你对数据类型的了解。比如:数组和指针的结合。

short (*ptr[100])[200] 一个存储了100个指针的数组,而数组中的指针指向的都是大小200的另外数组
求ptr、ptr[0]、*ptr[0]、(*ptr[0])[0]的空间大小。
这是一个网络上很常见的试题,可以尝试做一下,代码验证。

sizeof编译期间确定,因此很多运行期间的动作都是无效的。

  • 不要在sizeof()括号中,加上“动作”。它只是判断你的“状态”(静),不关心你的“行为”(动)。例如:sizeof(i++),i++不会生效
  • 区分数组和指针,计算对象为内存空间大小,最小单位为字节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值