sizeof没有()做什么?
当我问他什么sizeof * q
时, 这个问题的作者对我很开心……他告诉我这是一个非常基本的C问题,我应该检查一下。 但是当我环顾四周并且之前没有见过有人询问时,我现在就自己做了:
如果在没有括号和/或类型的情况下使用它,C中的sizeof
做什么?
因此,如果我们在C99标准草案第6.5.3
节中查看sizeof
的语法,则一元运算符第1段如下:
sizeof unary-expression sizeof ( type-name )
不同的是你不能使用没有括号的类型名称 ,第6.5.3.4
节sizeof运算符第2段说( 强调我的 ):
sizeof运算符产生其操作数的大小(以字节为单位),可以是表达式或类型的带括号的名称 。[…]
为了完整起见,您可能想知道如果我们有括号并且答案是肯定的,我们是否可以将sizeof
与表达式一起使用,因为一元表达式本身可以包含括号。 最简单的方法是查看标准草案中的A.2.1
表达式 ,并通过语法完成:
unary-expression -> postfix-expression -> primary-expression -> ( expression )
sizeof
是一个运算符,而不是一个函数,因此如果操作数是一个表达式(但通常使用它们),则不需要()
)。 sizeof * q == sizeof(*q)
。 注意,如果操作数是一个类型,你需要使用()
,所以sizeof(int)
(参见例如http://en.wikibooks.org/wiki/C_Programming/Reference_Tables )
sizeof sizeof operator for expressions sizeof 123 sizeof() sizeof operator for types sizeof (int)
现在连维基都充满了关于C的信息……世界变化很快:-)
sizeof运算符用于确定指定数据类型在内存中占用的空间量。 要使用sizeof,关键字“sizeof”后跟类型名称或表达式(可能只是变量名称)。 如果使用类型名称,则必须始终将其括在括号中,而可以使用括号或不使用括号指定表达式。
sizeof
是一个运算符 ,特别是像一元&
或++
这样的一元运算符。 它采用一元表达式或由parens包围的类型名称作为其操作数。
语法是
sizeof unary-expression sizeof( 类型名称 )
所以,给出一个像这样的声明
int *q;
表达式sizeof *q
和sizeof (int)
是等价的, sizeof q
和sizeof (int *)
。
与parofheses的sizeof相同。 它是一个右侧的一元运算符,因此它将其正确的大小视为操作数。
据我所知,当使用sizeof和基本数据类型时,必须使用paranthesis。
如果你有一个变量int a
你可以双向检查它的大小,parantheses不是必需的: sizeof a
, sizeof (a)
将工作相同。
但是当检查int本身的大小时,只有sizeof (int)
有效。
它与parens一样 – 它返回你传递它的大小,在这种情况下是q
所指向的大小。
但是,它有点不太清楚,特别是当我们涉及对malloc
和sizeof
复杂调用时,所以我认为最好总是使用parens。