2

意味的にはどういうsizeof (int) * p意味ですか? それは
1.sizeof( (int) *p )
または
2.( sizeof(int) ) * p
で、式がこのように評価されるのはどのルールですか?

4

2 に答える 2

4

sizeofは単項演算子で、 binary よりも優先順位が高い*ため、式sizeof (int) * pは として解析され(sizeof (int)) * pます。解析ツリーは次のとおりです。

             *
           /   \
       sizeof   p
         |
       (int)

編集

onezero のコメントから:

しかし、sizeof( (int) *p ) のように式を評価することはできませんか?

関連する構文は次のとおりです ( C2011 標準の投票ドラフトから)。

(6.5.3)単項式:
    後置式
    ++単項式
    --単項式 単項
    演算子 キャスト式
    sizeof単項式
    sizeof (型名)
    alignof (型名)

ご覧のとおり、は表現(int)の一部として解釈され、ピリオドが使用されます。cast-expressionsizeofの一部として解釈されません。この構文では、キャスト式を直接続けることはできません。それらの間には単項演算子(、、、、、、のいずれか)が必要です。 sizeof&*+-~!

于 2012-06-22T18:12:19.203 に答える
-1

それはpが何であるかに依存しませんか?

void main()
{{
   int p = 3;

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

12を出力します。

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

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

4を出力します。

于 2012-06-22T17:42:46.280 に答える