sizeof(int)* p在语义上是什么意思?

时间:2012-06-22 17:34:50

标签: c sizeof

sizeof (int) * p在语义上是什么意思?是吗:
1. sizeof( (int) *p )

2. ( sizeof(int) ) * p
什么规则使表达式以这种方式评估?

2 个答案:

答案 0 :(得分:4)

sizeof是一元运算符,其优先级高于二进制*,因此表达式sizeof (int) * p被解析为(sizeof (int)) * p。这是解析树:

             *
           /   \
       sizeof   p
         |
       (int)

修改

来自onezero的评论:

  

但是不能像sizeof((int)* p)那样计算表达式,因为sizeof运算符,类型转换运算符和*(取消引用)运算符具有相同的优先级并且从右到左关联?

以下是相关语法(来自C2011标准的ballot draft):

(6.5.3) unary-expression:
    postfix-expression
    ++ unary-expression
    -- unary-expression
    unary-operator cast-expression
    sizeof unary-expression
    sizeof ( type-name )
    alignof ( type-name )

如您所见,(int)被解释为sizeof表达式的一部分,完全停止。它不被解释为强制转换表达式的一部分。语法不允许sizeof直接跟随强制转换表达式;必须有一元操作符&*+-~,{{1之一}}) 它们之间。

答案 1 :(得分:-1)

它不依赖于p是什么?

void main()
{
   int p = 3;

   printf("%d", sizeof(int) *p);
}

输出12。

void main()
{
   char *p = "a";

   printf("%d", sizeof((int) *p));
}

输出4。