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 回答