typedef struct rem{
int addr;
char addrbuf[32];
} foo;
这两个代码返回相同的结果
foo addr;
printf("size is: %d\n",sizeof addr);
printf("size is: %d\n",sizeof (foo));
尺寸是:36
但我们什么时候应该使用带括号和不带括号的sizeof
?
当使用sizeof
与一个类型一起使用时,需要在类型周围加上括号。当将其与表达式一起使用时,则不需要。但是,在这种情况下,您当然也可以包括它们,并且您不必担心运算符优先级。对于这种不常见的运算符,较少的人会确定优先级,因此清晰度肯定有所帮助。
所以我认为最好始终使用它们。
sizeof a + b
并不意味着 sizeof (a + b)
。(我知道这也是你的本意。) - user743382char x[10]; sizeof(x + 1)
的结果将与 sizeof x + 1
很不相同。 - Iharob Al Asimisizeof
操作数周围可能需要加上括号。例如,考虑代码 char a; int x = sizeof(a)["abcdef"];
,那么 x
等于多少呢?你是否知道这与 sizeof (a["abcdef"])
或者 (sizeof a)["abcdef"]
等价?这对于那些认为 ()
是 sizeof
语法的一部分的人来说非常令人困惑。 - Ben Voigtsizeof
的表达式操作数必须是一个一元表达式,而不是一个强制转换表达式。 - user743382[expr.sizeof]/1:
操作数可以是一个未求值的表达式(第5节),或者是一个带括号的类型标识符。
因此,括号仅适用于类型。如果您喜欢为清晰和一致性而使用括号(就像我一样),您总是可以使用它们,因为将表达式放在括号中会形成另一个表达式。
sizeof
运算符的优先级并不是很知名,可能会引起烦恼。
另外,对于sizeof...
运算符,您始终需要使用括号(另一个保持一致性的原因)。
sizeof 1*2
的值是多少?它直观吗? - Columbosizeof 1*2
的大小是 int
的两倍?在我看来,这并不是很明显。 - Columbo