sizeof没有()做什么?

dhe*_*ein 7 c sizeof

当我问他什么时,这个问题的作者对我很开心 sizeof * q......他告诉我这是一个非常基本的C问题,我应该检查一下.但是当我环顾四周并且之前没有见过某人问过时,我现在就自己做了:

sizeof在没有括号和/或类型的情况下使用C时会做什么?

Sha*_*our 21

因此,如果我们sizeof在C99标准草案标准部分的6.5.3 一元操作符第1段中查看语法,则如下:

sizeof unary-expression
sizeof ( type-name )
Run Code Online (Sandbox Code Playgroud)

有一个区别你不能使用没有括号的类型名称和section 6.5.3.4 sizeof运算符段2说(强调我的):

sizeof运算符产生其操作数的大小(以字节为单位),可以是表达式或类型的带括号的名称.[...]

为了完整起见,你可能想知道如果我们sizeof有括号并且答案是肯定的,我们是否可以使用表达式,因为一元表达式本身可以包含括号.最简单的方法是查看标准草案中的A.2.1 表达式部分并完成语法,如下所示:

unary-expression -> postfix-expression -> primary-expression -> ( expression )
Run Code Online (Sandbox Code Playgroud)


xan*_*tos 19

sizeof是一个运算符,而不是一个函数,所以你不需要()if操作数是一个表达式(但你通常使用它们).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)
Run Code Online (Sandbox Code Playgroud)

现在连维基都充满了关于C的信息...世界正在快速变化:-)

sizeof运算符用于确定指定数据类型在内存中占用的空间量.要使用sizeof,关键字"sizeof"后跟类型名称或表达式(可能只是变量名称).如果使用类型名称,则必须始终将其括在括号中,而可以使用括号或不使用括号指定表达式.


Joh*_*ode 7

sizeof是一个运算符,特别是像一元&或一样的一元运算符++.它采用一元表达式或由parens包围的类型名称作为其操作数.

语法是

  sizeof unary-expression 
  sizeof ( type-name )

所以,给出一个类似的声明

int *q;
Run Code Online (Sandbox Code Playgroud)

表达式sizeof *q和sizeof (int)等价,原样sizeof q和sizeof (int *).