为了账号安全,请及时绑定邮箱和手机立即绑定

为什么sizeof被视为运算符?

为什么sizeof被视为运算符?

C
叮当猫咪 2019-10-08 14:49:15
为什么将其sizeof视为运算符而不是函数?要成为运营商,必须具备什么财产?
查看完整描述

4 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

因为C标准是这样说的,所以它是唯一的选择。

结果:

  • sizeof的操作数可以是带括号的类型sizeof (int),而不是对象表达式。

  • 括号是不必要的:int a; printf("%d\n", sizeof a);完全可以。人们经常看到它们,首先是因为它们需要作为类型转换表达式的一部分,其次是因为sizeof具有很高的优先级,因此sizeof a + b与并不相同sizeof (a+b)。但是它们不是sizeof调用的一部分,而是操作数的一部分。

  • 您不能使用sizeof的地址。

  • 作为sizeof操作数的表达式不会在运行时求值(sizeof a++不会修改a)。

  • 作为sizeof操作数的表达式可以具有除void或函数类型以外的任何类型。确实,这就是sizeof的重点。

在所有这些点上,功能都会有所不同。函数和一元运算符之间可能还存在其他差异,但是我认为这足以说明为什么sizeof不能成为函数,即使有理由要这样做。


查看完整回答
反对 回复 2019-10-08
?
暮色呼如

TA贡献1853条经验 获得超9个赞

它可以用作编译时常量,仅当它是运算符而不是函数时才可能使用。例如:


union foo {

    int i;

    char c[sizeof(int)];

};

从语法上讲,如果它不是运算符,则它必须是预处理器宏,因为函数不能将类型作为参数。这将是很难实现的宏,因为sizeof它既可以将类型也可以将变量作为参数。


查看完整回答
反对 回复 2019-10-08
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

因为C标准是这样说的,所以它是唯一的选择。


该标准可能是正确的,因为sizeof采用类型和


通常,如果函数的域或共域(或两者)包含比实数复杂得多的元素,则该函数称为运算符。相反,如果函数的域和共域都不包含比实数更复杂的元素,则该函数可能会简单地称为函数。余弦等三角函数就是后一种情况的示例。


另外,当函数被使用得比通用F(x,y,z,...)形式频繁地使用时,它们的符号表示法发展得更快或更容易时,所得的特殊形式也称为运算符。示例包括中缀运算符(例如加号“ +”和除号“ /”)以及后缀运算符(例如阶乘“!”)。这种用法与所涉及实体的复杂性无关。


查看完整回答
反对 回复 2019-10-08
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

因为它不是功能。您可以这样使用它:


int a;

printf("%d\n", sizeof a);

函数确实具有入口点,代码等。函数要在运行时(或内联)运行,sizeof必须在编译时确定。


查看完整回答
反对 回复 2019-10-08
  • 4 回答
  • 0 关注
  • 695 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信