sizeof (int) * p
语义上是什么意思?是:
1.sizeof( (int) *p )
还是
2.( sizeof(int) ) * p
是什么规则使表达式以这种方式被评估?
问问题
1579 次
2 回答
4
sizeof
是一元运算符,其优先级高于二元*
,因此表达式sizeof (int) * p
被解析为(sizeof (int)) * p
. 这是解析树:
*
/ \
sizeof p
|
(int)
编辑
来自 onezero 的评论:
但是不能像 sizeof( (int) *p ) 那样评估表达式,因为 sizeof 运算符、类型转换运算符和 *(dereference) 运算符具有相同的优先级并且从右到左关联?
以下是相关语法(来自C2011 标准的投票草案):
(6.5.3) unary-expression : postfix-expression ++ unary-expression -- unary-expression unary-operator cast-expression sizeof unary-expression sizeof ( type-name ) alignof (类型名)
如您所见, the(int)
被解释为sizeof
表达式的一部分,句号。它不被解释为cast-expression的一部分。语法不允许sizeof
直接跟在cast-expression后面;它们之间必须有一个一元运算符(&
, *
, +
, -
, ~
,之一!
)。
于 2012-06-22T18:12:19.203 回答
-1
这不取决于 p 是什么吗?
无效的主要() { 诠释 p = 3; printf("%d", sizeof(int) *p); }
将输出 12。
无效的主要() { 字符 *p = "a"; printf("%d", sizeof((int) *p)); }
将输出 4。
于 2012-06-22T17:42:46.280 回答